純js代碼生成可搜索選擇下拉列表的實(shí)例
1、因?yàn)閯?dòng)態(tài)的css樓主寫(xiě)不出來(lái),因此需要引入layui中的css樣式:<link rel="stylesheet" href="${ctxStatic}/layui/css/layui.css" rel="external nofollow" rel="external nofollow" >;
2、需要引入jquery-1.8.3.js版本的jquery
話(huà)不多說(shuō),代碼實(shí)現(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);//設(shè)置索引為id,值為本身對(duì)象
thisSelectFun($(this)).initData=json;//初始數(shù)據(jù)為json
/* var isShow=true;//是否顯示
var selectElements;//選擇的選項(xiàng)
var overStat=true;//鼠標(biāo)經(jīng)過(guò)的狀態(tài)
var checkedElementIds='';//選中項(xiàng)的id*/
//根據(jù)字段生成html代碼
setFieldTypeFun($(this));
//請(qǐng)求后臺(tái)數(shù)據(jù)
getSelectDataFun($(this));
//生成下拉列表
thisSelectFun($(this)).htmlText = createSelectFun($(this));//htmlText為緩存的html代碼
//調(diào)用總方法
callMethodFun($(this));
}
//根據(jù)對(duì)象id值獲取對(duì)象數(shù)據(jù)
function thisSelectFun(thisD) {
if(thisD.attr("id")==''){
alert("id值為空");
return null;
}
return selectData[thisD.attr("id")]
}
//根據(jù)對(duì)象字段生成html代碼
function setFieldTypeFun(thisD){
var thisId=thisD.attr("id");
var fields = selectData[thisId].initData;//以id獲取該對(duì)象的所有數(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);
}
//請(qǐng)求后臺(tái)數(shù)據(jù)
function getSelectDataFun(thisD) {
var fields = selectData[thisD.attr("id")].initData;//以id獲取該對(duì)象的所有數(shù)據(jù)
//判斷數(shù)據(jù)ajaxUrl中是否含有url字段
if(fields.ajaxUrl.hasOwnProperty('url')){
//以請(qǐng)求路徑為url請(qǐng)求后臺(tái)數(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()};
}
}
}
//請(qǐng)求后臺(tái)數(shù)據(jù)
function ajaxFunss(json) {
json['async']=false;
json['dataType']='json';
json['type']='post';
var layerLoadIndex = layer.load(1); //換了種風(fēng)格
var resultData=$.ajax(json);//發(fā)送請(qǐng)求
layer.close(layerLoadIndex);
if(resultData.status==200){//請(qǐng)求后臺(tái)數(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;//選中的選項(xiàng)
var overStat = thisSelectFun(thisD).overStat;//鼠標(biāo)經(jīng)過(guò)和離開(kāi)狀態(tài)
var checkedElementIds = thisSelectFun(thisD).checkedElementIds;//隱藏輸入框的value值*/
//小三角符號(hào)綁定點(diǎn)擊方法
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元素綁定點(diǎn)擊方法
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");//設(shè)置勾選狀態(tài)
var text = $("#" + searchId).val();//輸入框的內(nèi)容
var selectText = $(this).text() + ",";//選擇的選項(xiàng)
var checkedId = $(this).attr("lay-value") + ",";//獲取選項(xiàng)的id
if (text.indexOf(selectText) != -1) {//判斷輸入框中的內(nèi)容是否包含有所選的選項(xiàng)
return;
}
thisSelectFun(thisD).checkedElementIds += checkedId;
$("#" + searchId).val(text + selectText);
} else {
thisSelectFun(thisD).selectElements = true;
$(this).attr("class", "");//清空勾選狀態(tài)
var val = $(this).text() + ",";//勾選的選項(xiàng)
var checkedId = $(this).attr("lay-value") + ',';//獲取選項(xiàng)的id
var text = $("#" + searchId).val().replace(val, "");//清除勾選的選項(xiàng)
$("#" + searchId).val(text);//設(shè)置
thisSelectFun(thisD).checkedElementIds = thisSelectFun(thisD).checkedElementIds.replace(checkedId, "");//清除勾選的選項(xiàng)
}
}else {
//單選
//獲取已經(jīng)選中的選項(xiàng),并清除
var ddDom=thisD.find(".layui-this").eq(0);
ddDom.attr("class","");//清除
$(this).addClass("layui-this");//設(shè)置勾選狀態(tài)
var selectText = $(this).text();//選擇的選項(xiàng)
var checkedId = $(this).attr("lay-value");//獲取選項(xiàng)的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));
})
//鼠標(biāo)經(jīng)過(guò)時(shí)
dlDom.mouseover(function () {
thisSelectFun(thisD).overStat=false;
});
//鼠標(biāo)離開(kāi)時(shí)
dlDom.mouseout(function () {
thisSelectFun(thisD).overStat=true;
});
//鼠標(biāo)松開(kāi)時(shí)
$("body").mouseup(function () {
if(thisSelectFun(thisD).overStat==true){//并且overStat為true
divDom.attr("class","layui-form-select");//隱藏下拉列表
}
});
//搜索框鍵盤(pán)松開(kāi)事件
var searchDom = thisD.find("#"+searchId).eq(0);//搜索框?qū)ο?
searchDom.keyup(function () {
searchFunssss(thisD,searchId,divDom,dlDom);
});
}
//根據(jù)輸入內(nèi)容搜索出匹配的選項(xiàng)
function searchFunssss(thisD,searchId,divDom,dlDom) {
var val=$("#"+searchId).val();//搜索框id
if(val.length>0){
var conText='';//符合條件的選項(xiàng)
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é)點(diǎn)
dlDom.append(htmlText);
if(searchStats){
divDom.addClass("layui-form-selected");//顯示下拉列表
}
}
}
以上js代碼放在名稱(chēng)為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:{}},//請(qǐng)求后臺(tái)數(shù)據(jù)的路徑
selectType:true,//true多選,false單選
title:'商品狀態(tài)',//字段中文名稱(chēng)
inputId:'busgate'//實(shí)體類(lèi)字段
});
$("#sortDiv").selectDataFun({
ajaxUrl:{url:'${ctx}/goods/goods/getSortname',where:{}},
selectType:true,
title:'商品大類(lèi)',
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>商品名稱(chēng):</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代碼生成可搜索選擇下拉列表的實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- JS控制下拉列表左右選擇實(shí)例代碼
- jQuery實(shí)現(xiàn)在下拉列表選擇時(shí)獲取json數(shù)據(jù)的方法
- js使下拉列表框可編輯不止是選擇
- javascript實(shí)現(xiàn)通過(guò)拼音首字母快速選擇下拉列表
- js實(shí)現(xiàn)下拉列表選中某個(gè)值的方法(3種方法)
- jquery用ajax方式從后臺(tái)獲取json數(shù)據(jù)后如何將內(nèi)容填充到下拉列表
- jquery+json 通用三級(jí)聯(lián)動(dòng)下拉列表
- javaScript年份下拉列表框內(nèi)容為當(dāng)前年份及前后50年
- js獲取下拉列表框<option>中的value和text的值示例代碼
- JavaScript實(shí)現(xiàn)下拉列表選擇框
相關(guān)文章
使用純前端JavaScript實(shí)現(xiàn)Excel導(dǎo)入導(dǎo)出方法過(guò)程詳解
這篇文章主要介紹了使用純前端JavaScript實(shí)現(xiàn)Excel導(dǎo)入導(dǎo)出方法過(guò)程詳解,文章通過(guò)示例代碼和圖文解析介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
js實(shí)現(xiàn)文本上下來(lái)回滾動(dòng)
本文主要分享了js實(shí)現(xiàn)文本上下來(lái)回滾動(dòng)的示例代碼。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02
詳解Javacript和AngularJS中的Promises
這篇文章主要介紹了詳解Javacript和AngularJS中的Promises的相關(guān)資料,promise是Javascript異步編程很好的解決方案。,需要的朋友可以參考下2016-02-02
javascript入門(mén)之?dāng)?shù)組[新手必看]
本文介紹了javascript 數(shù)組的定義和數(shù)組元素的操作,ECMAScript中的數(shù)組方法...希望對(duì)大家有所幫助2016-11-11
bootstrap jquery dataTable 異步ajax刷新表格數(shù)據(jù)的實(shí)現(xiàn)方法
這篇文章主要介紹了bootstrap jquery dataTable 異步ajax刷新表格數(shù)據(jù)的實(shí)現(xiàn)方法,需要的朋友可以參考下2017-02-02
解決LayUI加上form.render()下拉框和單選以及復(fù)選框不出來(lái)的問(wèn)題
今天小編就為大家分享一篇解決LayUI加上form.render()下拉框和單選以及復(fù)選框不出來(lái)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09

