省市联动效果的简单实现代码(推荐)


Posted in Javascript onJune 06, 2016

下拉框二级联动效果在日常应用场景中经常会碰到,尤其是涉及地区、品种等有多级选项时。例如:常见的省市联动下拉框,在选择省份时,城市列表也会更随改变。

省市联动效果的简单实现代码(推荐)

思路:

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

下面是造的省市的数据:

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节点:

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事件:

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代码:

<div class="content">
      <h3>下拉框联动效果</h3>
      <p>省份:
        <select name="provinces" id="provinces">
          
        </select>
      </p>
      <p>
        市:
        <select name="citys" id="citys">
          
        </select>
      </p>
    </div>

全部JavaScript代码:

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:[
          "其他"
        ]
      }
      };
      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);
        }
      }
      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],
              ctLen = ct.length,
              ctBox = [];

          c.innerHTML = "";  
          /*添加城市*/  
          for(var j = 0;j < ctLen;j++){
            ctBox.push({
              "text" : ct[j],
              "value": ct[j]
            });
          }
          addOptions(c,ctBox);
        }
      }
      var provinces = document.getElementById('provinces'),
          citys     = document.getElementById('citys');
      provincesCitysLink(provinces,citys);

以上这篇省市联动效果的简单实现代码(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
IE不出现Flash激活框的小发现的js实现方法
Sep 07 Javascript
javascript实现的距离现在多长时间后的一个格式化的日期
Oct 29 Javascript
jquery 查找select ,并触发事件的实现代码
Mar 30 Javascript
jquery选择器原理介绍($()使用方法)
Mar 25 Javascript
AngularJs 60分钟入门基础教程
Apr 03 Javascript
利用原生JS与jQuery实现数字线性变化的动画
Feb 24 Javascript
微信小程序报错:this.setData is not a function的解决办法
Sep 27 Javascript
vue-awesome-swiper滑块插件使用方法详解
Nov 27 Javascript
使用axios实现上传图片进度条功能
Dec 21 Javascript
原生实现一个react-redux的代码示例
Jun 08 Javascript
JS中的一些常用的函数式编程术语
Jun 15 Javascript
js+springMVC 提交数组数据到后台的实例
Sep 21 Javascript
js获取新浪天气接口的实现代码
Jun 06 #Javascript
浅谈Sublime Text 3运行JavaScript控制台
Jun 06 #Javascript
浅谈Jquery中Ajax异步请求中的async参数的作用
Jun 06 #Javascript
浅谈String.valueOf()方法的使用
Jun 06 #Javascript
深入理解JavaScript单体内置对象
Jun 06 #Javascript
基于JS实现省市联动效果代码分享
Jun 06 #Javascript
对象转换为原始值的实现方法
Jun 06 #Javascript
You might like
php中文件上传的安全问题
2006/10/09 PHP
PHP取二进制文件头快速判断文件类型的实现代码
2013/08/05 PHP
浅谈PHP正则表达式中修饰符/i, /is, /s, /isU
2014/10/21 PHP
php计算一个文件大小的方法
2015/03/30 PHP
基于php实现的验证码小程序
2016/12/13 PHP
php PDO实现的事务回滚示例
2017/03/23 PHP
获取JavaScript用户自定义类的类名称的代码
2007/03/08 Javascript
EXT中xtype的含义分析
2010/01/07 Javascript
jquery 新浪网易的评论块制作
2010/07/01 Javascript
caller和callee的区别介绍及演示结果
2013/03/10 Javascript
使用jQuery内容过滤选择器选择元素实例讲解
2013/04/18 Javascript
浅谈javascript中for in 和 for each in的区别
2015/04/23 Javascript
jQuery动画效果实现图片无缝连续滚动
2016/01/12 Javascript
详细谈谈AngularJS的子级作用域问题
2016/09/05 Javascript
BootStrap Table复选框默认选中功能的实现代码(从数据库获取到对应的状态进行判断是否为选中状态)
2017/07/11 Javascript
重学 JS:为啥 await 不能用在 forEach 中详解
2019/04/15 Javascript
函数式编程入门实践(一)
2019/04/20 Javascript
vue中img src 动态加载本地json的图片路径写法
2019/04/25 Javascript
vue+eslint+vscode配置教程
2019/08/09 Javascript
vuex存值与取值的实例
2019/11/06 Javascript
浅谈Ant Design Pro 菜单自定义 icon
2020/11/17 Javascript
python实现的生成随机迷宫算法核心代码分享(含游戏完整代码)
2014/07/11 Python
python根据开头和结尾字符串获取中间字符串的方法
2015/03/26 Python
Python实现命令行通讯录实例教程
2016/08/18 Python
Python利用matplotlib生成图片背景及图例透明的效果
2017/04/27 Python
Python 使用指定的网卡发送HTTP请求的实例
2019/08/21 Python
Pycharm如何导入python文件及解决报错问题
2020/05/10 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
2020/05/26 Python
Keras官方中文文档:性能评估Metrices详解
2020/06/15 Python
澳大利亚礼品卡商店:Gift Card Store
2019/06/24 全球购物
美体小铺印度官网:The Body Shop印度
2019/10/17 全球购物
高中生家长寄语大全
2014/04/03 职场文书
新教师培训方案
2014/06/08 职场文书
大学本科生职业生涯规划书范文
2014/09/14 职场文书
五年级下册复习计划
2015/01/19 职场文书
颐和园英文导游词
2015/01/30 职场文书