Rumah hujung hadapan web tutorial js 纯js如何生成下拉列表

纯js如何生成下拉列表

Jun 12, 2018 pm 04:27 PM
senarai juntai bawah cari pilih

下面我就为大家分享一篇纯js代码生成可搜索选择下拉列表的实例,具有很好的参考价值,希望对大家有所帮助。

1、因为动态的css楼主写不出来,因此需要引入layui中的css样式:

<link rel="stylesheet" href="${ctxStatic}/layui/css/layui.css" rel="external nofollow" rel="external nofollow" >
Salin selepas log masuk

2、需要引入jquery-1.8.3.js版本的jquery

话不多说,代码实现如下:

var selectData={};//下拉列表总数据
/**
 * 下拉搜索,多选择等
 */
$.fn.selectDataFun=function (json) {
  selectData[$(this).attr("id")]={thisDom:null,initData:null,jsonData:null,htmlText:null,
    isShow:true,selectElements:true,overStat:true,checkedElementIds:&#39;&#39;};
  thisSelectFun($(this)).thisDom=$(this);//设置索引为id,值为本身对象
  thisSelectFun($(this)).initData=json;//初始数据为json
/*  var isShow=true;//是否显示
  var selectElements;//选择的选项
  var overStat=true;//鼠标经过的状态
  var checkedElementIds=&#39;&#39;;//选中项的id*/
  //根据字段生成html代码
  setFieldTypeFun($(this));
  //请求后台数据
  getSelectDataFun($(this));
  //生成下拉列表
  thisSelectFun($(this)).htmlText = createSelectFun($(this));//htmlText为缓存的html代码
  //调用总方法
  callMethodFun($(this));
}
//根据对象id值获取对象数据
function thisSelectFun(thisD) {
  if(thisD.attr("id")==&#39;&#39;){
    alert("id值为空");
    return null;
  }
  return selectData[thisD.attr("id")]
}
//根据对象字段生成html代码
function setFieldTypeFun(thisD){
  var thisId=thisD.attr("id");
  var fields = selectData[thisId].initData;//以id获取该对象的所有数据
  //生成html代码
  var title=fields.title;
  var inputId=fields.inputId;
  var selectHtml=&#39;<p class="layui-form-select">&#39;+&#39;<p class="layui-select-title">&#39;+
      &#39;<input type="hidden" id="&#39;+inputId+&#39;" name="&#39;+inputId+&#39;" />&#39;+
    &#39;<span>&#39;+title+&#39;:</span>&#39;+&#39; &#39;+&#39;<input id="&#39;+thisD.attr("id")+&#39;Search" value="" hiddenValue="" class="form-control input-sm" type="text">&#39;+
    &#39;<i class="layui-edge"></i>&#39;+&#39;</p>&#39;+&#39;<dl class="layui-anim layui-anim-upbit" id="&#39;+thisD.attr("id")+&#39;dl" style=""></dl>&#39;+
    &#39;</p>&#39;;
  thisD.append(selectHtml);
}
//请求后台数据
function getSelectDataFun(thisD) {
  var fields = selectData[thisD.attr("id")].initData;//以id获取该对象的所有数据
  //判断数据ajaxUrl中是否含有url字段
  if(fields.ajaxUrl.hasOwnProperty(&#39;url&#39;)){
    //以请求路径为url请求后台数据,并赋值给jsonData
    thisSelectFun(thisD).jsonData=ajaxFunss(fields.ajaxUrl);
  }else {
    if($.isEmptyObject(thisSelectFun(thisD).jsonData)){
      thisSelectFun(thisD).jsonData={ code: 0, msg: "获取成功", count: 0,data:new Array()};
    }
  }
}
//请求后台数据
function ajaxFunss(json) {
  json[&#39;async&#39;]=false;
  json[&#39;dataType&#39;]=&#39;json&#39;;
  json[&#39;type&#39;]=&#39;post&#39;;
  var layerLoadIndex = layer.load(1); //换了种风格
  var resultData=$.ajax(json);//发送请求
  layer.close(layerLoadIndex);
  if(resultData.status==200){//请求后台数据成功
    return resultData.responseJSON;
  }else {
    return null;
  }
}
//生成下拉列表
function createSelectFun(thisD) {
  var json=thisSelectFun(thisD).jsonData;
  var html=&#39;&#39;;
  for(var n in json){
    html+=&#39;<dd lay-value="&#39;+json[n].id+&#39;" class="">&#39;+json[n].name+&#39;</dd>&#39;;
  }
  var id=thisD.attr("id")+&#39;dl&#39;;
  $("#"+id).append(html);
  return html;
}
//调用总方法
function callMethodFun(thisD) {
  var iDom=thisD.find(".layui-edge").eq(0);//i元素,eq为等于的意思
  var pDom = thisD.find(".layui-form-select").eq(0);//下拉列表所在的p
  /* var isShow = thisSelectFun(thisD).isShow;//是否显示
  var selectElement = thisSelectFun(thisD).selectElements;//选中的选项
  var overStat = thisSelectFun(thisD).overStat;//鼠标经过和离开状态
  var checkedElementIds = thisSelectFun(thisD).checkedElementIds;//隐藏输入框的value值*/
  //小三角符号绑定点击方法
  iDom.click(function () {
    if(thisSelectFun(thisD).isShow){
      thisSelectFun(thisD).isShow=false;
      pDom.addClass("layui-form-selected");//显示下拉列表
    }else {
      thisSelectFun(thisD).isShow=true;
      pDom.attr("class","layui-form-select");//隐藏下拉列表
    }
  });
  //dl元素绑定点击方法
  var dlDom=thisD.find("dl").eq(0);
  var searchId = thisD.attr("id")+&#39;Search&#39;;//搜索框id
  dlDom.on("click",&#39;dd&#39;,function () {
    if(thisSelectFun(thisD).initData.selectType) {
      //多选
      if (thisSelectFun(thisD).selectElements) {
        thisSelectFun(thisD).selectElements = false;
        $(this).addClass("layui-this");//设置勾选状态
        var text = $("#" + searchId).val();//输入框的内容
        var selectText = $(this).text() + ",";//选择的选项
        var checkedId = $(this).attr("lay-value") + ",";//获取选项的id
        if (text.indexOf(selectText) != -1) {//判断输入框中的内容是否包含有所选的选项
          return;
        }
        thisSelectFun(thisD).checkedElementIds += checkedId;
        $("#" + searchId).val(text + selectText);
      } else {
        thisSelectFun(thisD).selectElements = true;
        $(this).attr("class", "");//清空勾选状态
        var val = $(this).text() + ",";//勾选的选项
        var checkedId = $(this).attr("lay-value") + &#39;,&#39;;//获取选项的id
        var text = $("#" + searchId).val().replace(val, "");//清除勾选的选项
        $("#" + searchId).val(text);//设置
        thisSelectFun(thisD).checkedElementIds = thisSelectFun(thisD).checkedElementIds.replace(checkedId, "");//清除勾选的选项
      }
    }else {
      //单选
      //获取已经选中的选项,并清除
      var ddDom=thisD.find(".layui-this").eq(0);
      ddDom.attr("class","");//清除
      $(this).addClass("layui-this");//设置勾选状态
      var selectText = $(this).text();//选择的选项
      var checkedId = $(this).attr("lay-value");//获取选项的id
      thisSelectFun(thisD).checkedElementIds = checkedId;
      $("#" + searchId).val(selectText);
      pDom.attr("class","layui-form-select");//隐藏下拉列表
  }
    var hiddenId=selectData[thisD.attr("id")].initData.inputId;//隐藏输入框id
    $("#"+hiddenId).val(thisSelectFun(thisD).checkedElementIds.substring(0,thisSelectFun(thisD).checkedElementIds.length-1));
  })
  //鼠标经过时
  dlDom.mouseover(function () {
    thisSelectFun(thisD).overStat=false;
  });
  //鼠标离开时
  dlDom.mouseout(function () {
    thisSelectFun(thisD).overStat=true;
  });
  //鼠标松开时
  $("body").mouseup(function () {
    if(thisSelectFun(thisD).overStat==true){//并且overStat为true
      pDom.attr("class","layui-form-select");//隐藏下拉列表
    }
  });
  //搜索框键盘松开事件
  var searchDom = thisD.find("#"+searchId).eq(0);//搜索框对象
  searchDom.keyup(function () {
    searchFunssss(thisD,searchId,pDom,dlDom);
  });
}
//根据输入内容搜索出匹配的选项
function searchFunssss(thisD,searchId,pDom,dlDom) {
  var val=$("#"+searchId).val();//搜索框id
  if(val.length>0){
    var conText=&#39;&#39;;//符合条件的选项
    var searchStats=false;//是否搜索到
    var htmlText=thisSelectFun(thisD).htmlText;//缓存的html代码
    dlDom.children().each(function () {
      var thisText=$(this).text();
      var thisDom=&#39;<dd lay-value="&#39;+$(this).attr("lay-value")+&#39;" class="">&#39;+thisText+&#39;</dd>&#39;;
      if(val==thisText){
        conText+=thisDom;
        htmlText=htmlText.replace(thisDom,"");
        searchStats=true;
        var searchId = thisD.attr("id")+&#39;Search&#39;;//搜索框id
        $("#"+searchId).val("");//清空搜索框
      }
    });
    htmlText=conText+htmlText;
    dlDom.children().remove();//删除其子节点
    dlDom.append(htmlText);
    if(searchStats){
      pDom.addClass("layui-form-selected");//显示下拉列表
    }
  }
}
Salin selepas log masuk


以上js代码放在名称为selectFun.js的js文件中

调用如下:

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ include file="/webpage/include/taglib.jsp"%>


  test
  
  <link rel="stylesheet" href="${ctxStatic}/layui/css/layui.css" rel="external nofollow" rel="external nofollow" >
  
  


  

商品名称: 商品代码: 商品条码:




Salin selepas log masuk

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

在vue中如何实现webpack打包优化

使用vue和react来实现展开收起等效果

在Vue 2.5.2下使用axios + express本地请求404的解决方法

如何把vue-router和express项目部署到服务器上去

Atas ialah kandungan terperinci 纯js如何生成下拉列表. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Akan R.E.P.O. Ada Crossplay?
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bolehkah enjin kertas dinding dikongsi sesama keluarga? Bolehkah enjin kertas dinding dikongsi sesama keluarga? Mar 18, 2024 pm 07:28 PM

Adakah Wallpaper menyokong perkongsian keluarga Malangnya, ia tidak boleh disokong. Namun, kami mempunyai penyelesaian. Contohnya, anda boleh membeli dengan akaun kecil atau memuat turun perisian dan kertas dinding daripada akaun besar dahulu, dan kemudian menukar kepada akaun kecil. Melancarkan perisian itu tidak mengapa. Bolehkah wallpaperengine dikongsi bersama keluarga? Jawapan: Kertas dinding tidak menyokong fungsi perkongsian keluarga pada masa ini. 1. Difahamkan bahawa WallpaperEngine nampaknya tidak sesuai untuk persekitaran perkongsian keluarga. 2. Untuk menyelesaikan masalah ini, anda disyorkan untuk mempertimbangkan untuk membeli akaun baharu 3. Atau muat turun perisian dan kertas dinding yang diperlukan dalam akaun utama dahulu, dan kemudian beralih ke akaun lain. 4. Hanya buka perisian dengan klik ringan dan ia akan baik-baik saja. 5. Anda boleh melihat sifat pada halaman web di atas"

iBatis vs. MyBatis: Mana satu yang lebih baik untuk anda? iBatis vs. MyBatis: Mana satu yang lebih baik untuk anda? Feb 19, 2024 pm 04:38 PM

iBatis vs. MyBatis: Mana yang patut anda pilih? Pengenalan: Dengan perkembangan pesat bahasa Java, banyak rangka kerja kegigihan telah muncul. iBatis dan MyBatis ialah dua rangka kerja kegigihan yang popular, kedua-duanya menyediakan penyelesaian capaian data yang mudah dan cekap. Artikel ini akan memperkenalkan ciri dan kelebihan iBatis dan MyBatis, dan memberikan beberapa contoh kod khusus untuk membantu anda memilih rangka kerja yang sesuai. Pengenalan kepada iBatis: iBatis ialah rangka kerja kegigihan sumber terbuka

Bagaimana untuk menetapkan kertas dinding skrin kunci pada enjin kertas dinding? Cara menggunakan enjin kertas dinding Bagaimana untuk menetapkan kertas dinding skrin kunci pada enjin kertas dinding? Cara menggunakan enjin kertas dinding Mar 13, 2024 pm 08:07 PM

WallpaperEngine ialah perisian yang biasa digunakan untuk menetapkan kertas dinding desktop Pengguna boleh mencari gambar kegemaran mereka dalam WallpaperEngine untuk menjana kertas dinding desktop. Ia juga menyokong penambahan gambar dari komputer ke WallpaperEngine untuk menetapkannya sebagai kertas dinding komputer. Mari kita lihat bagaimana kertas dindingengine menetapkan kertas dinding skrin kunci. Tutorial kertas dinding skrin kunci tetapan Wallpaperengine 1. Mula-mula masukkan perisian, kemudian pilih dipasang, dan klik "Konfigurasi Pilihan Kertas Dinding". 2. Selepas memilih kertas dinding dalam tetapan berasingan, anda perlu klik OK di bahagian bawah sebelah kanan. 3. Kemudian klik pada tetapan dan pratonton di atas. 4. Seterusnya

Bagaimana untuk mencari pengguna di Xianyu Bagaimana untuk mencari pengguna di Xianyu Feb 24, 2024 am 11:25 AM

Bagaimanakah Xianyu mencari pengguna? Dalam perisian Xianyu, kami boleh mencari secara langsung pengguna yang kami ingin berkomunikasi dalam perisian. Tetapi saya tidak tahu cara mencari pengguna. Lihat sahaja di kalangan pengguna selepas mencari. Seterusnya ialah pengenalan yang editor bawa kepada pengguna tentang cara mencari pengguna Jika anda berminat, datang dan lihat! Bagaimana untuk mencari pengguna di Xianyu Jawapan: Lihat butiran di kalangan pengguna yang dicari Pengenalan: 1. Masukkan perisian dan klik pada kotak carian. 2. Masukkan nama pengguna dan klik Cari. 3. Kemudian pilih [Pengguna] di bawah kotak carian untuk mencari pengguna yang sepadan.

Adakah terdapat sebarang virus semasa menonton filem enjin kertas dinding? Adakah terdapat sebarang virus semasa menonton filem enjin kertas dinding? Mar 18, 2024 pm 07:28 PM

Pengguna boleh memuat turun pelbagai kertas dinding apabila menggunakan WallpaperEngine, dan juga boleh menggunakan kertas dinding dinamik Ramai pengguna tidak tahu sama ada terdapat virus semasa menonton video di WallpaperEngine, tetapi fail video tidak boleh digunakan sebagai virus. Adakah terdapat sebarang virus semasa menonton filem pada mesin kertas dinding? 1. Hanya fail video tidak boleh digunakan sebagai virus. 2. Cuma pastikan anda memuat turun video daripada sumber yang dipercayai dan mengekalkan langkah keselamatan komputer untuk mengelakkan risiko jangkitan virus. 3. Kertas dinding aplikasi adalah dalam format apk, dan apk mungkin membawa virus Trojan. 4. WallpaperEngine sendiri tidak mempunyai virus, tetapi beberapa kertas dinding aplikasi dalam bengkel kreatif mungkin mempunyai virus.

Cara menggunakan carian lanjutan Baidu Cara menggunakan carian lanjutan Baidu Feb 22, 2024 am 11:09 AM

Cara menggunakan Carian Terperinci Baidu Enjin carian Baidu kini merupakan salah satu enjin carian yang paling biasa digunakan di China. Ia menyediakan pelbagai fungsi carian, salah satunya ialah carian lanjutan. Carian lanjutan boleh membantu pengguna mencari maklumat yang mereka perlukan dengan lebih tepat dan meningkatkan kecekapan carian. Jadi, bagaimana untuk menggunakan carian lanjutan Baidu? Langkah pertama ialah membuka halaman utama enjin carian Baidu. Pertama, kita perlu membuka laman web rasmi Baidu, iaitu www.baidu.com. Ini adalah pintu masuk ke carian Baidu. Dalam langkah kedua, klik butang Carian Terperinci. Di sebelah kanan kotak carian Baidu, terdapat

Dalam folder manakah terdapat kertas dinding enjin kertas dinding? Dalam folder manakah terdapat kertas dinding enjin kertas dinding? Mar 19, 2024 am 08:16 AM

Apabila menggunakan kertas dinding, pengguna boleh memuat turun pelbagai kertas dinding yang mereka suka untuk digunakan Ramai pengguna tidak tahu folder mana kertas dinding itu berada. Kertas dinding yang dimuat turun oleh pengguna disimpan dalam folder kandungan. Dalam folder manakah kertas dinding itu? Jawapan: folder kandungan. 1. Buka Penjelajah Fail. 2. Klik "PC ini" di sebelah kiri. 3. Cari folder "STEAM". 4. Pilih "steamapps". 5. Klik “bengkel”. 6. Cari folder "kandungan".

Adakah enjin kertas dinding menggunakan banyak kuasa? Adakah enjin kertas dinding menggunakan banyak kuasa? Mar 18, 2024 pm 08:30 PM

Pengguna boleh menukar kertas dinding komputer mereka apabila menggunakan WallpaperEngine Ramai pengguna tidak tahu bahawa WallpaperEngine menggunakan banyak kuasa daripada kertas dinding statik, tetapi tidak banyak. Adakah mesin kertas dinding menggunakan banyak kuasa. Jawapan: Tidak banyak. 1. Kertas dinding dinamik menggunakan lebih sedikit kuasa daripada kertas dinding statik, tetapi tidak banyak. 2. Menghidupkan kertas dinding dinamik akan meningkatkan penggunaan kuasa komputer dan menghilangkan sedikit penggunaan memori. 3. Pengguna tidak perlu risau tentang penggunaan kuasa yang serius bagi kertas dinding dinamik.

See all articles