三级联动的js代码

三级联动的js代码

简介

不适用其他插件,用jquery调用后台接口,实现行政区划的三级联动功能

html

<div class="form-group">
          <label class="col-lg-2 col-md-2 col-sm-12 control-label">注册地址</label>
                <div class="col-lg-2 col-md-2">
                       <select id="reProvinceDicId"  class="form-control">
                       </select>
                </div>
                <div class="col-lg-2 col-md-2">
                       <select id="reCityDicId" class="form-control">
                       </select>
                </div>
                <div class="col-lg-2 col-md-2">
                       <select id="reCountyDicId" class="form-control">
                       </select>
                </div>
</div>

引入js

     <script src="../assets/js/bootstrap/bootstrap-select.min.js"></script>
     <script src="../assets/js/areaUtils.js"></script>
     <script src="../assets/js/selectUtils.js"></script>

areaUtils.js

/**
 * 三级联动,公共js类
 */
//init
var AREAUTILS = function () {};

//initArea
AREAUTILS.prototype.initArea=function (str1,str2,str3){
         var _this=this;
        
         _this.ProvinceBind(str1, str2, str3);
        
          $("#"+str1).change( function () {
                _this.ProvinceOnChange(str1, str2, str3);
          });
        
        $("#"+str1).change( function () {
            _this.CityBind(str1,str2);
        });
        
        $("#"+str2).change(function () {
            _this.CountyBind(str2,str3);
        });
};

//省的onchange事件
AREAUTILS.prototype.ProvinceOnChange =function (str1, str2, str3) {
    var provice = $("#"+str1).attr("value");
    //判断省份这个下拉框选中的值是否为空
    if (provice == 0) {
        $("#"+str2).html("");
        new SELECTUTILS().addDefaultOptionSelected(str2);
       $("#"+str3).html("");
        new SELECTUTILS().addDefaultOptionSelected(str3);
       return;
    }
};

//省的方法
AREAUTILS.prototype.ProvinceBind=function (str1, str2, str3) {
    var _this=this;

   //清空下拉数据
   $("#"+str1).html("");

    $.get("/district", { parentId: 0, level:1}, function(districtData) {
         new SELECTUTILS().addAllOption(str1, districtData);
    }, "json");
    
    new SELECTUTILS().addDefaultOptionSelected(str2);

    new SELECTUTILS().addDefaultOptionSelected(str3);
};

//市的方法
AREAUTILS.prototype.CityBind=function (str1,str2){
    var _this=this;
    var provice = $("#"+str1).attr("value");
    //判断省份这个下拉框选中的值是否为空
    if (provice == "") {
         return;
    }
    $("#"+str2).html("");
        
    $.get("/district", { parentId: provice, level:2}, function(districtData) {
         new SELECTUTILS().addAllOption(str2, districtData);
    }, "json");
    
};


//县的方法
AREAUTILS.prototype.CountyBind=function (str2,str3) {
     var _this=this;
   var city = $("#"+str2).attr("value");
    //判断市这个下拉框选中的值是否为空
   if (city == "") {
       return;
   }
   $("#"+str3).html("");

     $.get("/district", { parentId: city, level:3}, function(districtData) {
          new SELECTUTILS().addAllOption(str3, districtData);
     }, "json");
};

//回显方法
AREAUTILS.prototype.ShowCallBack =function (str1, str2, str3, s1value, s2value, s3value){
        var _this=this;
       _this.ProvinceBindSelected(str1,s1value);
       _this.CityBindSelected(s1value,str2,s2value);
       _this.CountyBindSelected(s2value,str3,s3value);
       _this.BindOnChange(str1, str2, str3);
};

//绑定三级联动的onchange
AREAUTILS.prototype.BindOnChange =function (str1, str2, str3){
              var _this=this;

            $("#"+str1).change( function () {
                _this.CityBind(str1,str2);
            });
            
            $("#"+str2).change(function () {
                _this.CountyBind(str2,str3);
            });
}

//省已经勾选,进行回显
AREAUTILS.prototype.ProvinceBindSelected=function (str1,selected) {
    //清空下拉数据
    $("#"+str1).html("");

      $.get("/district", { parentId: 0, level:1}, function(areaData) {
          new SELECTUTILS().addAllOptionSelected(str1, areaData, '', '', selected);
      }, "json");
};

//市已经勾选,进行回显
AREAUTILS.prototype.CityBindSelected=function (str1Value,str2,selected){
    var provice = str1Value;
    //判断省份这个下拉框选中的值是否为空
    if (provice == "") {
         return;
    }
    $("#"+str2).html("");
        
    $.get("/district", { parentId: provice, level:2}, function(areaData) {
         new SELECTUTILS().addAllOptionSelected(str2, areaData, '', '', selected);
    }, "json");
};
 
//县已经勾选,进行回显
AREAUTILS.prototype.CountyBindSelected=function (str2Value,str3,selected) {
    var city = str2Value;
    //判断市这个下拉框选中的值是否为空
    if (city == "") {
        return;
    }
    $("#"+str3).html("");

      $.get("/district", { parentId: city, level:3}, function(areaData) {
          new SELECTUTILS().addAllOptionSelected(str3, areaData, '', '', selected);
      }, "json");
};

selectUtils.js

/**
 * 下拉框js,公共js类
 */

//init
var SELECTUTILS = function () {};

/**
 * 添加下拉框信息
 * @domId String 下拉框ID
 * @dictData {} 数据
 * @idField id字段
 * @nameField name字段
 */
SELECTUTILS.prototype.addOption =function (domId, dictData, idField, nameField){
     var option = "";
     
     //id
     var finalIdField="";
     if(idField==null || idField==""){
         finalIdField="id";
     }else{
         finalIdField=idField;
     }
     
     //name
     var finalNameField="";
     if(nameField==null || nameField==""){
         finalNameField="name";
     }else{
         finalNameField=nameField;
     }
     
     //for
     for (var i = 0; i < dictData.length; i++) {
         option += "<option  value=" + dictData[i][finalIdField] + ">" + dictData[i][finalNameField] + "</option>";
     }     
     
     $("#"+domId).find("option").remove();
     $("#" + domId).append(option).selectpicker('refresh');
};

/**
 * 添加下拉框信息(有'请选择')
 * @domId String 下拉框ID
 * @dictData {} 数据
 * @idField id字段
 * @nameField name字段
 */
SELECTUTILS.prototype.addAllOption =function (domId, dictData, idField, nameField){
     var option = "";
     
     //id
     var finalIdField="";
     if(idField==null || idField==""){
         finalIdField="id";
     }else{
         finalIdField=idField;
     }
     
     //name
     var finalNameField="";
     if(nameField==null || nameField==""){
         finalNameField="name";
     }else{
         finalNameField=nameField;
     }
     
         option += "<option value='0'>---请选择---</option>";
        
     for (var i = 0; i < dictData.length; i++) {
         option += "<option  value=" + dictData[i][finalIdField] + ">" + dictData[i][finalNameField] + "</option>";
     }     
     
     $("#"+domId).find("option").remove();
     $("#" + domId).append(option).selectpicker('refresh');
};

/**
 * 添加下拉框信息(有'请选择'),回显使用
 * @domId String 下拉框ID
 * @dictData {} 数据
 * @idField id字段
 * @nameField name字段
 * @selectId 回显id字段
 */
SELECTUTILS.prototype.addAllOptionSelected =function (domId, dictData, idField, nameField ,selectId){
     var option = "";
     
     //id
     var finalIdField="";
     if(idField==null || idField==""){
         finalIdField="id";
     }else{
         finalIdField=idField;
     }
     
     //name
     var finalNameField="";
     if(nameField==null || nameField==""){
         finalNameField="name";
     }else{
         finalNameField=nameField;
     }
     
         option += "<option value='0'>---请选择---</option>";
        
     for (var i = 0; i < dictData.length; i++) {
         if(selectId==dictData[i][finalIdField]){
             option += "<option  value=" + dictData[i][finalIdField] + "  selected='selected' >" + dictData[i][finalNameField] + "</option>";
         }else{
             option += "<option  value=" + dictData[i][finalIdField] + ">" + dictData[i][finalNameField] + "</option>";
         }
     }
     $("#"+domId).find("option").remove();
     $("#" + domId).append(option).selectpicker('refresh');
};

//默认情况
SELECTUTILS.prototype.addDefaultOptionSelected =function (domId){
     var option = "";
         option += "<option value='0'>---请选择---</option>";           
     
     $("#"+domId).find("option").remove();
     $("#" + domId).append(option).selectpicker('refresh');
};

/**
 * 验证下拉框为一个有效的选择
 * @domId String 下拉框ID
 * @return boolean
 */
SELECTUTILS.prototype.checkIsSelected =function (domId){
    var flag=true;
    
    var selectValue = $("#"+domId+" option:selected").val();  
    
    //为'undefined'
    if(typeof(selectValue)=='undefined'){
        flag=false;
    }
    //''
    if(selectValue==''){
        flag=false;
    }
    //null
    if(selectValue==null){
        flag=false;
    }
    //为非数字
    var intRe = /^\d+(?=\.{0,1}\d+$|$)/;
    if (!intRe.test(selectValue) && flag==true) {
        flag=false;
    }
    
    return flag;
};

调用(创建与回显)

//创建
new AREAUTILS().initArea("reProvinceDicId","reCityDicId","reCountyDicId");
     
//回显(修改时回显;省份 城市 县镇 对应的domId,以及对应的选中id)
new AREAUTILS().ShowCallBack("reProvinceDicId",   "reCityDicId",   "reCountyDicId",data.reProvinceDicId,data.reCityDicId,data.reCountyDicId);
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352

推荐阅读更多精彩内容