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


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 相关文章推荐
广泛收集的jQuery拖放插件集合
Apr 09 Javascript
js小数运算出现多位小数如何解决
Oct 08 Javascript
javascript实现自动填写表单实例简析
Dec 02 Javascript
JavaScript函数中关于valueOf和toString的理解
Jun 14 Javascript
JS组件系列之使用HTML标签的data属性初始化JS组件
Sep 14 Javascript
bootstrap flask登录页面编写实例
Nov 01 Javascript
使用jQuery 操作table 完成单元格合并的实例
Dec 27 jQuery
jQuery获取所有父级元素及同级元素及子元素的方法(推荐)
Jan 21 jQuery
Vue2.0 http请求以及loading展示实例
Mar 06 Javascript
Vue下拉框回显并默认选中随机问题
Sep 06 Javascript
用node撸一个监测复联4开售短信提醒的实现代码
Apr 10 Javascript
jquery实现图片无缝滚动 蒙版遮蔽效果
Jan 11 jQuery
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
不用数据库的多用户文件自由上传投票系统(1)
2006/10/09 PHP
php+js iframe实现上传头像界面无跳转
2014/04/29 PHP
php按字符无乱码截取中文的方法
2015/03/27 PHP
详解PHP实现执行定时任务
2015/12/21 PHP
脚本吧 - 幻宇工作室用到js,超强推荐expand.js
2006/12/23 Javascript
js Function类型
2011/12/04 Javascript
深入理解JavaScript系列(2) 揭秘命名函数表达式
2012/01/15 Javascript
JS模拟简易滚动条效果代码(附demo源码)
2016/04/05 Javascript
javascript 数组的定义和数组的长度
2016/06/07 Javascript
js实现下一页页码效果
2017/03/07 Javascript
Angular4 中内置指令的基本用法
2017/07/31 Javascript
JS+canvas动态绘制饼图的方法示例
2017/09/12 Javascript
jQuery实现表单动态添加与删除数据操作示例
2018/07/03 jQuery
Layui实现带查询条件的分页
2019/07/27 Javascript
JS数组方法push()、pop()用法实例分析
2020/01/18 Javascript
浅谈vue 二级路由嵌套和二级路由高亮问题
2020/08/06 Javascript
Python实现获取操作系统版本信息方法
2015/04/08 Python
python用模块zlib压缩与解压字符串和文件的方法
2016/12/16 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
2018/02/26 Python
PyQt5 QTable插入图片并动态更新的实例
2019/06/18 Python
Python3实现配置文件差异对比脚本
2019/11/18 Python
Django choices下拉列表绑定实例
2020/03/13 Python
使用pth文件添加Python环境变量方式
2020/05/26 Python
python boto和boto3操作bucket的示例
2020/10/30 Python
Boden英国官网:英国知名原创时装品牌
2018/11/06 全球购物
阿拉伯书店:Jamalon
2019/07/24 全球购物
承认错误的检讨书
2014/01/30 职场文书
优秀会计求职信
2014/07/04 职场文书
办公室文员工作自我鉴定
2014/09/19 职场文书
个人遵守党的政治纪律情况对照检查材料思想汇报
2014/09/25 职场文书
部队反四风对照检查材料
2014/09/26 职场文书
学生抄作业检讨书(2篇)
2014/10/17 职场文书
2014年个人业务工作总结
2014/11/17 职场文书
2015年精神文明建设工作总结
2015/04/21 职场文书
2016年感恩教师节校园广播稿
2015/12/18 职场文书
Python anaconda安装库命令详解
2021/10/16 Python