基于JS实现省市联动效果代码分享

在日常项目开发阶段经常见到下拉框二级联动效果,尤其是涉及地区、品种等有多级选项时。比如说:常见的省市联动下拉框,在选择省份时,城市列表也会更随改变。

1,所谓联动效果,是指出发父级的数据变化时,会影响到关联性子级数据元素的变化。

下面是造的省市的数据:

rush:js;"> var linkDatas = { provinces:[ { "code":"0","name":"请选择" },{ "code":"1","name":"北京" },{ "code":"2","name":"天津" },{ "code":"3","name":"河北" },{ "code":"4","name":"湖北" },{ "code":"5","name":"广东" },{ "code":"6","name":"其他" } ],citys:{ 0:[ "请选择" ],1:[ "朝阳区","海淀区","东城区","西城区","房山区","其他" ],2:[ "天津" ],3:[ "沧州","石家庄","秦皇岛",4:[ "武汉市","宜昌市","襄樊市",5:[ "广州市","深圳市","汕头市","佛山市","珠海市",6:[ "其他" ] } };

2,根据数据动态生成option节点:

rush:js;"> function addOptions(target,options){ var optionEle = null,target = target,option = options,optionLen = options.length; for(var i = 0;i < optionLen;i++){ optionEle = document.createElement('option'); optionEle.value = option[i].value; optionEle.text = option[i].text; target.options.add(optionEle); } }

3,根据上述省市数据,其中code代表“省级”指向“城市”的标识符,当省级的数据变更时,出发change事件:

rush:js;"> pro.onchange = function(){ console.log(this); var ct = city[this.value],ctLen = ct.length,ctBox = []; c.innerHTML = ""; /*添加城市*/ for(var j = 0;j < ctLen;j++){ ctBox.push({ "text" : ct[j],"value": ct[j] }); } addOptions(c,ctBox); }

HTML代码

rush:js;">
下拉框联动效果

省份:

全部JavaScript代码

rush:js;"> var linkDatas = { provinces:[ { "code":"0",6:[ "其他" ] } }; function addOptions(target,optionLen = options.length; for(var i = 0;i < optionLen;i++){ optionEle = document.createElement('option'); optionEle.value = option[i].value; optionEle.text = option[i].text; target.options.add(optionEle); } } function provincesCitysLink(pro,c){ var LD = linkDatas,provinces = LD.provinces,city = LD.citys,initCity = city[0],proBox = []; /*添加省份*/ for(var i = 0;i < provinces.length;i++){ proBox.push({ "text" : provinces[i].name,"value": provinces[i].code }) } addOptions(pro,proBox); /*初始化城市*/ addOptions(c,[{ "text" : initCity,"value": initCity }]); /*添加联动事件*/ pro.onchange = function(){ console.log(this); var ct = city[this.value],ctBox); } } var provinces = document.getElementById('provinces'),citys = document.getElementById('citys'); provincesCitysLink(provinces,citys);

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...