亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

layui自定義插件citySelect實現省市區三級聯動選擇

2024-05-06 16:53:39
字體:
來源:轉載
供稿:網友

本文實例為大家分享了layui實現省市區三級聯動選擇的具體代碼,供大家參考,具體內容如下

/** * @ name : citySelect 省市區三級選擇模塊 * @ Author: aggerChen * @ version: 1.0 */layui.define(['layer','form','element','laytpl'], function(exports){ var $ = layui.$; var form = layui.form; var laytpl = layui.laytpl; var element = layui.emelemt;  //外部接口 var citySelect = {   config: {} //全局配置項   ,cache: {} //數據緩存   ,index: layui.laypage ? (layui.laypage.index + 10000) : 0 };  //操作當前實例 var thisSelect = function(){   var that = this,   options = that.config,   id = options.id;   id && (thisSelect.config[id] = options);      return {    reload: function(options){    that.reload.call(that, options);    },    config: options   } };  //字符常量 var MOD_NAME = 'citySelect';  //主模板 var TPL_MAIN = ['<div class="layui-form-item" >',   '<label class="layui-form-label">{{ d.data.lableName }}</label>',   '<div class="layui-input-inline" style="width:160px">',    '<select name="{{ d.data.filed.provinceName }}" class="{{ d.data.id }}_selectCity" id="citySelect_{{ d.data.filed.provinceName }}{{ d.index }}" lay-filter="province{{ d.index }}" {{#if(d.data.search){ }} lay-search {{# } }} {{#if(d.data.required){ }} lay-verify="required" {{# } }} {{#if(d.data.disabled){ }} disabled {{# } }} >',    '<option value="000000">-- 全部 --</option>',    '</select>',   '</div>',   '<div class="layui-input-inline" style="width:161px">',    '<select name="{{ d.data.filed.cityName }}" class="{{ d.data.id }}_selectCity" id="citySelect_{{ d.data.filed.cityName }}{{ d.index }}" lay-filter="city{{ d.index }}" {{#if(d.data.search){ }} lay-search {{# } }} {{#if(d.data.required){ }} lay-verify="required" {{# } }} {{#if(d.data.disabled){ }} disabled {{# } }} >',    '<option value="">-- 全部 --</option>',    '</select>',   '</div>',   '{{# if(d.data.filed.area){ }}',   '<div class="layui-input-inline" style="width:161px">',    '<select name="{{ d.data.filed.areaName }}" class="{{ d.data.id }}_selectCity" id="citySelect_{{ d.data.filed.areaName }}{{ d.index }}" lay-filter="area{{ d.index }}" {{#if(d.data.search){ }} lay-search {{# } }} {{#if(d.data.required){ }} lay-verify="required" {{# } }} {{#if(d.data.disabled){ }} disabled {{# } }} >',    '<option value="">-- 全部 --</option>',    '</select>',   '</div>',   '{{# } }}',      '{{# if(d.data.msg){ }}',    '<div class="layui-form-mid layui-word-aux">{{ d.data.msg }}</div>',    '{{# } }}',   '</div>'  ].join(""); //選項模板 var TPL_OPTION = [         '<option value="">-- 全部 --</option>',         '{{# layui.each(d.data,function(index,item){ }}',         '<option class="ajaxOption" value="{{ item[d.options.filed.regionId] }}" {{#if(d.options.selectedArr.length>0 && ($.inArray(item[d.options.filed.regionId], d.options.selectedArr)!=-1)){ }} selected {{# } }} >{{ item[d.options.filed.regionName] }}</option>',         '{{# }) }}'         ].join("");   //構造器 var Class = function(options){ var that = this;   that.index = ++citySelect.index;   that.config = $.extend(true,{}, that.config, citySelect.config, options);   that.render(); };  //核心入口 citySelect.render = function(options){   var inst = new Class(options);   return thisSelect.call(inst); };  //獲取選中值 citySelect.values = function(id){ return citySelect.cache[id]["values"]; //返回緩存中的選中值  };  //設置禁用/啟用  citySelect.disabled = function(id,flag){   $("."+id+"_selectCity").attr("disabled",flag);  };  //重載  thisSelect.config = {};  citySelect.reload = function(id,options){   var config = thisSelect.config[id];    if(!config) return hint.error('The ID option was not found in the citySelect instance');    return citySelect.render($.extend(true, {}, config, options));  };  //默認配置 Class.prototype.config = { lableName : "行政區域", required : false, //是否必選 search : true,  //是否搜索 msg:null,  //默認附加信息 selectedArr : [], //默認選中數組 disabled:false,  //禁用 默認不禁用 filed:{   area:true,  //默認啟用區   regionId:'regionId', //默認字段id名   regionName:'regionName',//默認字段name名   provinceName: "province", //默認省份名稱  cityName : "city",  //默認城市名稱  areaName : "area",  //默認區縣名稱   },  };  //加載容器 Class.prototype.render = function(){  var that = this;  var options = that.config;   options.elem = $(options.elem);  var othis = options.elem;   if(!options.elem[0]) return that; //如果元素不存在     //請求參數的自定義格式   options.request = $.extend({    //pageName: 'page',    //limitName: 'limit'   }, options.request);      //響應數據的自定義格式   options.response = $.extend({   statusName: 'code',   statusCode: 0,   msgName: 'msg',   dataName: 'data',   }, options.response);    //主容器  var reElem = that.elem = $(laytpl(TPL_MAIN).render({    //VIEW_CLASS: ELEM_VIEW,    data: options,    index: that.index //索引  }));  othis.html(reElem);  //生成主元素  that.pullData();  //渲染初始  that.formFilter();  //監聽選擇   };  //監聽表單 Class.prototype.formFilter = function(){ var that = this; var options = that.config; that.key = options.id || options.index;  //監聽省 form.on('select(province'+that.index+')', function(data){  var cityDom = $("#citySelect_"+ options.filed.cityName + that.index); //市  var areaDom = $("#citySelect_"+ options.filed.areaName + that.index); //區  that.chearDom(cityDom);    //清理市  that.chearDom(areaDom);    //清理區  citySelect.cache[that.key]["values"][0] = data.value; //存入緩存  citySelect.cache[that.key]["values"][1] = "";  //清理市級緩存  citySelect.cache[that.key]["values"][2] = "";  //清理區級緩存  if(data.value!=""){  if(options.data){   that.localData(cityDom, data.value);  //本地渲染市級    }else{   that.ajaxData(cityDom,data.value);   //ajax渲染市  }  } });  //監聽市 form.on('select(city'+that.index+')', function(data){  var areaDom = $("#citySelect_"+ options.filed.areaName + that.index); //區  that.chearDom(areaDom);     //清理區  citySelect.cache[that.key]["values"][1] = data.value;  citySelect.cache[that.key]["values"][2] = "";  if(data.value!=""){  if(options.data){   that.localData(areaDom, data.value);  //本地渲染市級    }else{   that.ajaxData(areaDom,data.value);   //加載區  }  } });  //監聽區 form.on('select(area'+that.index+')', function(data){  citySelect.cache[that.key]["values"][2] = data.value;  console.log("選擇區"); //得到select原始DOM對象 });   };  //渲染數據 Class.prototype.pullData = function(){ var that = this; var options = that.config; var dom = $("#citySelect_"+ options.filed.provinceName + that.index); //默認先渲染省 that.key = options.id || options.index; citySelect.cache[that.key] = {values:["","",""]}; //記錄values緩存標記  if(options.data){  //data存在  that.localData(dom,"000000"); }else if(options.url){ //url存在  that.ajaxData(dom); }  };  //data渲染數據 Class.prototype.localData = function(dom,regionId){  var that = this; var options = that.config; var regs = /^/d{2}0000$/; //驗證省id  var regc = /^/d{4}00$/; //驗證市ID if(regionId=="000000"){  //渲染省級  that.renderData(options.data,dom); }else if(regs.test(regionId)){  //渲染市級  $.each(options.data,function(index,item){  if(regionId==item[options.filed.regionId]){   that.renderData(item.children,dom);  }  }); }else if(regc.test(regionId)){  //渲染區級  var sId = regionId.substr(0, 2)+"0000"; //獲取省級Id  $.each(options.data,function(index,item){  if(sId==item[options.filed.regionId]){   $.each(item.children,function(i,it){   if(regionId==it[options.filed.regionId]){    that.renderData(it.children,dom);   }   });  }  }); } }   //ajax獲取數據 Class.prototype.ajaxData = function(dom,regionId){ var that = this; var options = that.config;   var response = options.response;   var params = {};   params[options.filed.regionId] = regionId==undefined?"000000":regionId;      //先查看緩存有沒有   if(citySelect.cache[that.key][regionId]!=undefined ){    that.renderData(citySelect.cache[that.key][regionId],dom);   }else{   $.ajax({    type: options.method || 'get',    url: options.url,    data: $.extend(params, options.where),    dataType: 'json',    success: function(res){    if(res[response.statusName] != response.statusCode){     that.renderForm();     typeof options.error === 'function' && options.error(res);     return ;    }    var data = res[options.response.dataName] || [];    that.renderData(data,dom);    if(data.length>0){     citySelect.cache[that.key][regionId] = data;  //將已經獲取的數據保存緩存    }    options.time = (new Date().getTime() - that.startTime) + ' ms'; //耗時(接口請求+視圖渲染)    typeof options.done === 'function' && options.done(res);    }   ,error: function(e, m){    that.renderData('<option value="">數據接口請求異常</option>',dom);    typeof options.error === 'function' && options.error(res, e,m);   }   });   }    };  //數據渲染 Class.prototype.renderData = function(data,dom){ var that = this, options = that.config; var selectedArr = options.selectedArr; //獲取默認選中數組  if(typeof data === 'string'){  $(dom).html(data); }else{  //渲染選擇項  $(dom).html( $(laytpl(TPL_OPTION).render({  data: data,  options:options,  index: that.index //索引  })));  that.renderForm('select'); } //設置默認選中 var v = $(dom).val(); if(v!=""&&selectedArr.length>0){  for (var i = 0; i < selectedArr.length; i++) {  if(v == selectedArr[i] && i<3){   citySelect.cache[that.key]["values"][i] = v; //保存到選中緩存   that.config.selectedArr[i] = "";   //清除默認選擇數組   if(i==0){   var dom = $("#citySelect_"+ options.filed.cityName + that.index);   if(options.data){    that.localData(dom, v); //本地渲染市級     }else{    that.ajaxData(dom, v); //ajax渲染市級   }   }else if(i==1&&options.filed.area){   var dom = $("#citySelect_"+ options.filed.areaName + that.index);   if(options.data){    that.localData(dom, v); //本地渲染區級     }else{    that.ajaxData(dom, v); //ajax渲染區級   }   }  }  } } };  //渲染表單 Class.prototype.renderForm = function(type){ form.render(type); };  //清空select Class.prototype.chearDom = function(dom){ var that = this; $(dom).html(''); $(dom).append('<option value="">-- 全部 --</option>'); that.renderForm('select'); };  //暴露模塊 exports(MOD_NAME, citySelect);});

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品免费在线视频| 亚洲无亚洲人成网站77777| 国产精品综合网站| 97色在线观看免费视频| 国产精品久久色| 精品国产精品三级精品av网址| 国产最新精品视频| 中文字幕日韩欧美| 精品视频在线播放| 亚洲国产精品成人精品| 一本久久综合亚洲鲁鲁| 欧美一区二区三区图| 亚洲国产高潮在线观看| 久久久久久久久久久久久久久久久久av| 91精品国产免费久久久久久| 国产美女久久久| 欧美精品免费在线| 夜夜狂射影院欧美极品| 国产做受高潮69| 欧美激情成人在线视频| 日韩欧美福利视频| 欧美激情亚洲另类| 日韩高清有码在线| 色婷婷综合久久久久中文字幕1| 国产在线观看精品| 欧美精品videos性欧美| 久久久国产精品一区| 亚洲精品国产精品自产a区红杏吧| 日韩av网站大全| 欧美激情一区二区三区成人| 久热精品在线视频| 久久久亚洲福利精品午夜| 亚洲精品国偷自产在线99热| 欧美疯狂xxxx大交乱88av| 国模吧一区二区| 国产精品久久久久久久久久新婚| 91在线看www| 国产精彩精品视频| 中文字幕精品久久| 国产日韩精品视频| 久久久久久伊人| 精品亚洲国产成av人片传媒| 精品视频—区二区三区免费| 97在线免费视频| 97人人爽人人喊人人模波多| 亚洲人成在线观看| 欧美激情精品久久久久久黑人| 91av免费观看91av精品在线| 国产精品日韩在线| 国产精品电影久久久久电影网| 亚洲自拍偷拍福利| 国产精品一区二区久久精品| 亚洲影院色在线观看免费| 伦伦影院午夜日韩欧美限制| 国产成人精品日本亚洲| 欧美日韩亚洲精品一区二区三区| 欧美最顶级丰满的aⅴ艳星| 日韩在线视频线视频免费网站| 亚洲一区二区免费| 精品视频9999| 国产精品91免费在线| 成人福利免费观看| 一本大道亚洲视频| 日韩精品在线播放| 亚洲色图35p| 欧美一级片久久久久久久| 国产精品久久久久久久久久小说| 亚洲永久免费观看| xvideos国产精品| 17婷婷久久www| 亚洲精品按摩视频| 国产91色在线|免| 国产中文字幕日韩| 少妇av一区二区三区| 精品欧美aⅴ在线网站| 亚洲三级免费看| 精品久久国产精品| 欧美激情一区二区三区成人| 亚洲国产精品视频在线观看| 日韩电影网在线| 亚洲天堂免费观看| 91精品国产91久久久| 热99在线视频| 韩日欧美一区二区| 欧美一级视频免费在线观看| 欧美在线视频一区二区| 91精品国产综合久久香蕉最新版| 91美女福利视频高清| 午夜精品久久久久久久99黑人| 日韩a**站在线观看| 久久在线观看视频| 91精品久久久久久久久久另类| 免费av一区二区| 久久在线视频在线| 中文字幕亚洲情99在线| 国产脚交av在线一区二区| 国产成人一区二区三区小说| 美女视频久久黄| 97婷婷大伊香蕉精品视频| 久久91亚洲精品中文字幕奶水| 亚洲精品视频在线播放| 日本精品视频在线播放| 国产成人小视频在线观看| 亚洲影视中文字幕| 68精品国产免费久久久久久婷婷| 欧美性视频在线| 精品五月天久久| 日本午夜人人精品| 欧美激情精品久久久久久黑人| 美女福利精品视频| 亚洲精品久久在线| 国产va免费精品高清在线| 国产日韩综合一区二区性色av| 国产精品久久91| 亚洲国产精品推荐| 精品少妇一区二区30p| 欧美又大又硬又粗bbbbb| 97在线精品视频| 2019中文字幕在线| 日韩有码片在线观看| 精品一区二区电影| 欧美国产亚洲精品久久久8v| 久国内精品在线| 国产精品91免费在线| 久久久久久97| 亚洲欧洲日产国码av系列天堂| 欧美性xxxx极品hd满灌| 久久精品人人爽| 亚洲欧洲中文天堂| 欧美丰满少妇xxxxx做受| 黄色一区二区三区| 欧美视频在线观看 亚洲欧| 亚洲女成人图区| 亚洲欧美日韩另类| 久久久之久亚州精品露出| 久久艳片www.17c.com| 久久精品亚洲国产| 国产精品高潮呻吟久久av无限| 欧美乱妇高清无乱码| 粉嫩老牛aⅴ一区二区三区| 亚洲国产精久久久久久久| 亚洲精品国产综合区久久久久久久| 欧美日韩一区免费| 91免费国产视频| 午夜美女久久久久爽久久| 精品激情国产视频| 国产成人鲁鲁免费视频a| 国产在线精品一区免费香蕉| 久久久久五月天| 久久久久久国产精品| 亚洲精品久久在线| 91精品国产高清久久久久久91| 精品国产91乱高清在线观看| 欧美日韩中文字幕在线| 日韩女优人人人人射在线视频| 在线观看国产精品91| 亚洲美女在线视频| 精品久久久在线观看| 日韩在线免费视频| 国产精品99久久久久久白浆小说| 国产精品久久久久7777婷婷| 亚洲激情视频网| 欧美性高潮在线| 久久久999国产|