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


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 相关文章推荐
获取DOM对象的几种扩展及简写
Oct 09 Javascript
用javascript操作xml
Nov 04 Javascript
写入cookie的JavaScript代码库 cookieLibrary.js
Oct 24 Javascript
jquery中获取id值方法小结
Sep 22 Javascript
javascript计算用户打开网页的停留时间
Jan 09 Javascript
JavaScript验证18位身份证号码最后一位正确性的实现代码
Aug 07 Javascript
JS锚点的设置与使用方法
Sep 05 Javascript
微信小程序  audio音频播放详解及实例
Nov 02 Javascript
用jquery的attr方法实现图片切换效果
Feb 05 Javascript
基于node打包可执行文件工具_Pkg使用心得分享
Jan 24 Javascript
js实现带箭头的进度流程
Mar 26 Javascript
js实现幻灯片轮播图
Aug 14 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之Smarty入门
2007/01/04 PHP
php实现与erlang的二进制通讯实例解析
2014/07/23 PHP
使用PHP和HTML5 FormData实现无刷新文件上传教程
2014/09/06 PHP
php session的锁和并发
2016/01/22 PHP
Symfony实现行为和模板中取得request参数的方法
2016/03/17 PHP
Yii中特殊行为ActionFilter的使用方法示例
2020/10/18 PHP
BOOM vs RR BO5 第二场 2.14
2021/03/10 DOTA
javascript iframe中打开文件,并检测iframe存在否
2008/12/28 Javascript
js压缩工具 yuicompressor 使用教程
2010/03/31 Javascript
Javascript 面试题随笔
2011/03/31 Javascript
jQuery load方法用法集锦
2011/12/06 Javascript
RequireJS使用注意细节
2016/05/15 Javascript
flexslider.js实现移动端轮播
2017/02/05 Javascript
vue的一个分页组件的示例代码
2017/12/25 Javascript
Vue中div contenteditable 的光标定位方法
2018/08/25 Javascript
详解如何在vscode里面调试js和node.js的方法步骤
2018/12/24 Javascript
Layui数据表格判断编辑输入的值,是否为我需要的类型详解
2019/10/26 Javascript
Vue中component标签解决项目组件化操作
2020/09/04 Javascript
Vant 在vue-cli 4.x中按需加载操作
2020/11/05 Javascript
Python通过解析网页实现看报程序的方法
2014/08/04 Python
Python3.2模拟实现webqq登录
2016/02/15 Python
python实现m3u8格式转换为mp4视频格式
2018/02/28 Python
python实现C4.5决策树算法
2018/08/29 Python
python实现换位加密算法的示例
2018/10/14 Python
python matplotlib 画dataframe的时间序列图实例
2019/11/20 Python
python 定义类时,实现内部方法的互相调用
2019/12/25 Python
Pycharm新手使用教程(图文详解)
2020/09/17 Python
HTML5 body设置全屏背景图片的示例代码
2020/12/08 HTML / CSS
Canvas在超级玛丽游戏中的应用详解
2021/02/06 HTML / CSS
COSETTE官网:奢华,每天
2020/03/22 全球购物
会计毕业自我鉴定
2014/02/05 职场文书
个人政风行风自查自纠报告
2014/10/21 职场文书
2015年幼儿园中班开学寄语
2015/05/27 职场文书
《倍数和因数》教学反思
2016/02/23 职场文书
Django实现聊天机器人
2021/05/31 Python
Django基础CBV装饰器和中间件
2022/03/22 Python