純js代碼生成可搜索選擇下拉列表的實例
1、因為動態(tài)的css樓主寫不出來,因此需要引入layui中的css樣式:<link rel="stylesheet" href="${ctxStatic}/layui/css/layui.css" rel="external nofollow" rel="external nofollow" >;
2、需要引入jquery-1.8.3.js版本的jquery
話不多說,代碼實現(xiàn)如下:
var selectData={};//下拉列表總數(shù)據(jù) /** * 下拉搜索,多選擇等 */ $.fn.selectDataFun=function (json) { selectData[$(this).attr("id")]={thisDom:null,initData:null,jsonData:null,htmlText:null, isShow:true,selectElements:true,overStat:true,checkedElementIds:''}; thisSelectFun($(this)).thisDom=$(this);//設置索引為id,值為本身對象 thisSelectFun($(this)).initData=json;//初始數(shù)據(jù)為json /* var isShow=true;//是否顯示 var selectElements;//選擇的選項 var overStat=true;//鼠標經(jīng)過的狀態(tài) var checkedElementIds='';//選中項的id*/ //根據(jù)字段生成html代碼 setFieldTypeFun($(this)); //請求后臺數(shù)據(jù) getSelectDataFun($(this)); //生成下拉列表 thisSelectFun($(this)).htmlText = createSelectFun($(this));//htmlText為緩存的html代碼 //調(diào)用總方法 callMethodFun($(this)); } //根據(jù)對象id值獲取對象數(shù)據(jù) function thisSelectFun(thisD) { if(thisD.attr("id")==''){ alert("id值為空"); return null; } return selectData[thisD.attr("id")] } //根據(jù)對象字段生成html代碼 function setFieldTypeFun(thisD){ var thisId=thisD.attr("id"); var fields = selectData[thisId].initData;//以id獲取該對象的所有數(shù)據(jù) //生成html代碼 var title=fields.title; var inputId=fields.inputId; var selectHtml='<div class="layui-form-select">'+'<div class="layui-select-title">'+ '<input type="hidden" id="'+inputId+'" name="'+inputId+'" />'+ '<span>'+title+':</span>'+' '+'<input id="'+thisD.attr("id")+'Search" value="" hiddenValue="" class="form-control input-sm" type="text">'+ '<i class="layui-edge"></i>'+'</div>'+'<dl class="layui-anim layui-anim-upbit" id="'+thisD.attr("id")+'dl" style=""></dl>'+ '</div>'; thisD.append(selectHtml); } //請求后臺數(shù)據(jù) function getSelectDataFun(thisD) { var fields = selectData[thisD.attr("id")].initData;//以id獲取該對象的所有數(shù)據(jù) //判斷數(shù)據(jù)ajaxUrl中是否含有url字段 if(fields.ajaxUrl.hasOwnProperty('url')){ //以請求路徑為url請求后臺數(shù)據(jù),并賦值給jsonData thisSelectFun(thisD).jsonData=ajaxFunss(fields.ajaxUrl); }else { if($.isEmptyObject(thisSelectFun(thisD).jsonData)){ thisSelectFun(thisD).jsonData={ code: 0, msg: "獲取成功", count: 0,data:new Array()}; } } } //請求后臺數(shù)據(jù) function ajaxFunss(json) { json['async']=false; json['dataType']='json'; json['type']='post'; var layerLoadIndex = layer.load(1); //換了種風格 var resultData=$.ajax(json);//發(fā)送請求 layer.close(layerLoadIndex); if(resultData.status==200){//請求后臺數(shù)據(jù)成功 return resultData.responseJSON; }else { return null; } } //生成下拉列表 function createSelectFun(thisD) { var json=thisSelectFun(thisD).jsonData; var html=''; for(var n in json){ html+='<dd lay-value="'+json[n].id+'" class="">'+json[n].name+'</dd>'; } var id=thisD.attr("id")+'dl'; $("#"+id).append(html); return html; } //調(diào)用總方法 function callMethodFun(thisD) { var iDom=thisD.find(".layui-edge").eq(0);//i元素,eq為等于的意思 var divDom = thisD.find(".layui-form-select").eq(0);//下拉列表所在的div /* var isShow = thisSelectFun(thisD).isShow;//是否顯示 var selectElement = thisSelectFun(thisD).selectElements;//選中的選項 var overStat = thisSelectFun(thisD).overStat;//鼠標經(jīng)過和離開狀態(tài) var checkedElementIds = thisSelectFun(thisD).checkedElementIds;//隱藏輸入框的value值*/ //小三角符號綁定點擊方法 iDom.click(function () { if(thisSelectFun(thisD).isShow){ thisSelectFun(thisD).isShow=false; divDom.addClass("layui-form-selected");//顯示下拉列表 }else { thisSelectFun(thisD).isShow=true; divDom.attr("class","layui-form-select");//隱藏下拉列表 } }); //dl元素綁定點擊方法 var dlDom=thisD.find("dl").eq(0); var searchId = thisD.attr("id")+'Search';//搜索框id dlDom.on("click",'dd',function () { if(thisSelectFun(thisD).initData.selectType) { //多選 if (thisSelectFun(thisD).selectElements) { thisSelectFun(thisD).selectElements = false; $(this).addClass("layui-this");//設置勾選狀態(tài) var text = $("#" + searchId).val();//輸入框的內(nèi)容 var selectText = $(this).text() + ",";//選擇的選項 var checkedId = $(this).attr("lay-value") + ",";//獲取選項的id if (text.indexOf(selectText) != -1) {//判斷輸入框中的內(nèi)容是否包含有所選的選項 return; } thisSelectFun(thisD).checkedElementIds += checkedId; $("#" + searchId).val(text + selectText); } else { thisSelectFun(thisD).selectElements = true; $(this).attr("class", "");//清空勾選狀態(tài) var val = $(this).text() + ",";//勾選的選項 var checkedId = $(this).attr("lay-value") + ',';//獲取選項的id var text = $("#" + searchId).val().replace(val, "");//清除勾選的選項 $("#" + searchId).val(text);//設置 thisSelectFun(thisD).checkedElementIds = thisSelectFun(thisD).checkedElementIds.replace(checkedId, "");//清除勾選的選項 } }else { //單選 //獲取已經(jīng)選中的選項,并清除 var ddDom=thisD.find(".layui-this").eq(0); ddDom.attr("class","");//清除 $(this).addClass("layui-this");//設置勾選狀態(tài) var selectText = $(this).text();//選擇的選項 var checkedId = $(this).attr("lay-value");//獲取選項的id thisSelectFun(thisD).checkedElementIds = checkedId; $("#" + searchId).val(selectText); divDom.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)); }) //鼠標經(jīng)過時 dlDom.mouseover(function () { thisSelectFun(thisD).overStat=false; }); //鼠標離開時 dlDom.mouseout(function () { thisSelectFun(thisD).overStat=true; }); //鼠標松開時 $("body").mouseup(function () { if(thisSelectFun(thisD).overStat==true){//并且overStat為true divDom.attr("class","layui-form-select");//隱藏下拉列表 } }); //搜索框鍵盤松開事件 var searchDom = thisD.find("#"+searchId).eq(0);//搜索框?qū)ο? searchDom.keyup(function () { searchFunssss(thisD,searchId,divDom,dlDom); }); } //根據(jù)輸入內(nèi)容搜索出匹配的選項 function searchFunssss(thisD,searchId,divDom,dlDom) { var val=$("#"+searchId).val();//搜索框id if(val.length>0){ var conText='';//符合條件的選項 var searchStats=false;//是否搜索到 var htmlText=thisSelectFun(thisD).htmlText;//緩存的html代碼 dlDom.children().each(function () { var thisText=$(this).text(); var thisDom='<dd lay-value="'+$(this).attr("lay-value")+'" class="">'+thisText+'</dd>'; if(val==thisText){ conText+=thisDom; htmlText=htmlText.replace(thisDom,""); searchStats=true; var searchId = thisD.attr("id")+'Search';//搜索框id $("#"+searchId).val("");//清空搜索框 } }); htmlText=conText+htmlText; dlDom.children().remove();//刪除其子節(jié)點 dlDom.append(htmlText); if(searchStats){ divDom.addClass("layui-form-selected");//顯示下拉列表 } } }
以上js代碼放在名稱為selectFun.js的js文件中
調(diào)用如下:
<%@ page contentType="text/html;charset=UTF-8" %> <%@ include file="/webpage/include/taglib.jsp"%> <html> <head> <title>test</title> <meta name="decorator" content="default"/> <link rel="stylesheet" href="${ctxStatic}/layui/css/layui.css" rel="external nofollow" rel="external nofollow" > <script src="${ctxStatic}/selectFun.js" charset="utf-8"></script> <script type="text/javascript"> $(document).ready(function() { $("#busgateDiv").selectDataFun({ ajaxUrl:{url:'${ctx}/goods/goods/getStat',where:{}},//請求后臺數(shù)據(jù)的路徑 selectType:true,//true多選,false單選 title:'商品狀態(tài)',//字段中文名稱 inputId:'busgate'//實體類字段 }); $("#sortDiv").selectDataFun({ ajaxUrl:{url:'${ctx}/goods/goods/getSortname',where:{}}, selectType:true, title:'商品大類', inputId:'sort' }); }); </script> </head> <body class="gray-bg"> <div class="row"> <div class="col-sm-12"> <form:form id="searchForm" modelAttribute="goods" action="${ctx}/goods/goods/dataListFun" method="post" class="form-inline"> <div class="form-group"> <span>商品名稱:</span> <form:input path="name" htmlEscape="false" maxlength="80" class=" form-control input-sm"/> <span>商品代碼:</span> <form:input path="code" htmlEscape="false" maxlength="80" class=" form-control input-sm"/> <span>商品條碼:</span> <form:input path="code2" htmlEscape="false" maxlength="30" class=" form-control input-sm"/> </div> <br/><br/> <div class="form-group"> <div class="layui-inline" id="sortDiv"> </div> <div class="layui-inline" id="busgateDiv"> </div </div> </form:form> <br/> </div> </div> </body> </html>
以上這篇純js代碼生成可搜索選擇下拉列表的實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
- JS控制下拉列表左右選擇實例代碼
- jQuery實現(xiàn)在下拉列表選擇時獲取json數(shù)據(jù)的方法
- js使下拉列表框可編輯不止是選擇
- javascript實現(xiàn)通過拼音首字母快速選擇下拉列表
- js實現(xiàn)下拉列表選中某個值的方法(3種方法)
- jquery用ajax方式從后臺獲取json數(shù)據(jù)后如何將內(nèi)容填充到下拉列表
- jquery+json 通用三級聯(lián)動下拉列表
- javaScript年份下拉列表框內(nèi)容為當前年份及前后50年
- js獲取下拉列表框<option>中的value和text的值示例代碼
- JavaScript實現(xiàn)下拉列表選擇框
相關(guān)文章
使用純前端JavaScript實現(xiàn)Excel導入導出方法過程詳解
這篇文章主要介紹了使用純前端JavaScript實現(xiàn)Excel導入導出方法過程詳解,文章通過示例代碼和圖文解析介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-08-08詳解Javacript和AngularJS中的Promises
這篇文章主要介紹了詳解Javacript和AngularJS中的Promises的相關(guān)資料,promise是Javascript異步編程很好的解決方案。,需要的朋友可以參考下2016-02-02bootstrap jquery dataTable 異步ajax刷新表格數(shù)據(jù)的實現(xiàn)方法
這篇文章主要介紹了bootstrap jquery dataTable 異步ajax刷新表格數(shù)據(jù)的實現(xiàn)方法,需要的朋友可以參考下2017-02-02解決LayUI加上form.render()下拉框和單選以及復選框不出來的問題
今天小編就為大家分享一篇解決LayUI加上form.render()下拉框和單選以及復選框不出來的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09