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


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 简短右键菜单 多浏览器兼容
Jan 01 Javascript
JavaScript Event学习第四章 传统的事件注册模型
Feb 07 Javascript
JQuery实现绚丽的横向下拉菜单
Dec 19 Javascript
Node.js插件的正确编写方式
Aug 03 Javascript
TypeScript Type Innference(类型判断)
Mar 10 Javascript
微信小程序访问node.js接口服务器搭建教程
Apr 25 Javascript
jquery仿微信聊天界面
May 06 jQuery
Node.js开发第三方微信公众平台
Jun 05 Javascript
JavaScript实现选中文字提示新浪微博分享效果
Jun 15 Javascript
Angular.js中数组操作的方法教程
Jul 31 Javascript
js如何获取图片url的Blob值并预览示例代码
Mar 07 Javascript
JavaScript 去重和重复次数统计
Mar 31 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
DC四月将推出百页特刊漫画 纪念小丑诞生80周年
2020/04/09 欧美动漫
上海地方志办公室-上海电子仪表工业志
2021/03/04 无线电
十天学会php(2)
2006/10/09 PHP
关于Intype一些小问题的解决办法
2008/03/28 PHP
PHP中比较时间大小实例
2014/08/21 PHP
php代码调试利器firephp安装与使用方法分析
2018/08/21 PHP
PHP生成二维码与识别二维码的方法详解【附源码下载】
2019/03/07 PHP
laravel框架中间件简单使用方法示例
2020/01/25 PHP
大家未必知道的Js技巧收藏
2008/04/07 Javascript
Javascript 中的 call 和 apply使用介绍
2012/02/22 Javascript
NodeJS Web应用监听sock文件实例
2015/02/18 NodeJs
CSS中position属性之fixed实现div居中
2015/12/14 Javascript
javascript中Date format(js日期格式化)方法小结
2015/12/17 Javascript
BootStrap中的table实现数据填充与分页应用小结
2016/05/26 Javascript
AngularJs定时器$interval 和 $timeout详解
2017/05/25 Javascript
node 标准输入流和输出流代码实例
2019/09/19 Javascript
浅谈v-for 和 v-if 并用时筛选条件方法
2019/11/07 Javascript
微信小程序button标签open-type属性原理解析
2020/01/21 Javascript
JavaScript实现横版菜单栏
2020/03/17 Javascript
9个JavaScript日常开发小技巧
2020/10/06 Javascript
使用python Django做网页
2013/11/04 Python
Python的Flask框架中@app.route的用法教程
2015/03/31 Python
Python返回数组/List长度的实例
2018/06/23 Python
Python文件打开方式实例详解【a、a+、r+、w+区别】
2019/03/30 Python
WxPython实现无边框界面
2019/11/18 Python
Python 将json序列化后的字符串转换成字典(推荐)
2020/01/06 Python
五分钟学会HTML5的WebSocket协议
2019/11/22 HTML / CSS
传统软件工程与面向对象的软件工程有什么区别
2012/05/31 面试题
土木工程建筑专业毕业生求职信
2013/10/21 职场文书
公司捐款倡议书
2014/05/14 职场文书
优秀党员先进事迹材料
2014/12/18 职场文书
《蜜蜂引路》教学反思
2016/02/22 职场文书
找规律教学反思
2016/02/23 职场文书
Python中else的三种使用场景
2021/06/16 Python
基于Python实现股票收益率分析
2022/04/02 Python
MySQL count(*)统计总数问题汇总
2022/09/23 MySQL