js实现简单的省市县三级联动效果实例


Posted in Javascript onFebruary 18, 2016

本文实例讲述了js实现简单的省市县三级联动效果。分享给大家供大家参考,具体如下:

js代码部分

//省市县数据格式
var province_city_county_data=[
  {
    province:"四川",
    city:[
      {
        cityName:"成都",
        county:["成都市","崇州市","金堂县"]
      },
      {
        cityName:"南充",
        county:["仪陇县","南部县","营山县"]
      }
    ]
  },
  {
    province:"北京",
    city:[
      {  cityName:"北京市",
        county:["东城区","朝阳区"]
      }
    ]
  },
  {
    province:"安徽",
    city:[
      {  cityName:"安庆",
        county:["安庆市","怀宁县","潜山县"]
      },
      {  cityName:"蚌埠",
        county:["蚌埠市","固镇县","怀远县"]
      }
    ]
  }
]
var opt0 = ["省份","地级市","市、县级市、县"];
var selectID_arr2=["provinceid","cityid","countyid"];
var province_index;
window.onload = function(){
  //初始化下拉框
  function init_select(){
    init_title();
    init_province();
    bind_province();
  }
  //初始化提示标题
  function init_title(){
    for(var k = 0;k<selectID_arr2.length;k++){
      var select_obj= document.getElementById(selectID_arr2[k]);
      select_obj.options[0]=new Option(opt0[k],opt0[k]);
    }
  }
  //初始化省份
  function init_province(){
    var province_select_obj = document.getElementById(selectID_arr2[0]);
    var province_len = province_city_county_data.length;
    for(var i = 0;i<province_len;i++){
      province_select_obj.options[i+1] = new Option(province_city_county_data[i].province,province_city_county_data[i].province);
    }
  }
  //给省份绑定onchange事件
  function bind_province(){
    var province_select_obj = document.getElementById(selectID_arr2[0]);
    province_select_obj.onchange=function(){
      var opt_index =province_select_obj.selectedIndex;
      if(opt_index!=0){
        province_index = opt_index-1;  //每个省份的序号比 option 的下标要小1
        init_city(province_index);
        bind_city();
        init_county(province_index,0);
      }else{
        clear_city();
        clear_county();
      }
    }
  }
  //选择一个省份才能初始化地级市
  function init_city(index){
    clear_city();
    var city_len = province_city_county_data[index].city.length;
    for(var i = 0;i<city_len;i++){
      document.getElementById(selectID_arr2[1]).options[i+1] = new Option(province_city_county_data[index].city[i].cityName,province_city_county_data[index].city[i].cityName);
    }
    document.getElementById(selectID_arr2[1]).options[1].selected = true;
  }
  //清除地级市信息
  function clear_city(){
    var city_select_obj = document.getElementById(selectID_arr2[1]);
    city_select_obj.options.length=0; //每次选中一个新的省份 都重新删除地级市的信息
    init_title();   //重新初始化标题
  }
  //给地级市绑定onchange事件
  function bind_city(){
    var city_select_obj = document.getElementById(selectID_arr2[1]);
    city_select_obj.onchange=function(){
      var opt_index =city_select_obj.selectedIndex;
      if(opt_index!=0){
        init_county(province_index,opt_index-1);
      }else{
        clear_county();
      }
    }
  }
  //选择一个地级市后才能初始化县
  function init_county(index,city_index){
    clear_county();
    var county_len = province_city_county_data[index].city[city_index].county.length;
    for(var i = 0;i<county_len;i++){
      document.getElementById(selectID_arr2[2]).options[i+1] = new Option(province_city_county_data[index].city[city_index].county[i],province_city_county_data[index].city[city_index].county[i]);
    }
    document.getElementById(selectID_arr2[2]).options[1].selected = true;
  }
  //清除县城信息
  function clear_county(){
    var county_select_obj = document.getElementById(selectID_arr2[2]);
    county_select_obj.options.length=0; //每次选中一个新的地级市 都重新删除县的信息
    init_title();   //重新初始化标题
  }
  init_select()
}

html部分

<select id="provinceid"></select>
<select id="cityid"></select>
<select id="countyid"></select>

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
使javascript也能包含文件
Oct 26 Javascript
jQuery 位置插件
Dec 25 Javascript
Prototype的Class.create函数解析
Sep 22 Javascript
js获得鼠标的坐标值的方法
Mar 13 Javascript
javascript验证身份证完全方法具体实现
Nov 18 Javascript
js获取checkbox复选框选中的选项实例
Aug 24 Javascript
JavaScript的各种常见函数定义方法
Sep 16 Javascript
JS制作手机端自适应缩放显示
Jun 11 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
Sep 05 Javascript
layer弹出层扩展主题的方法
Sep 11 Javascript
详解vue中v-bind:style效果的自定义指令
Jan 21 Javascript
vue实现移动端返回顶部
Oct 12 Javascript
XML、HTML、CSS与JS的区别整理
Feb 18 #Javascript
jQuery插件实现适用于移动端的地址选择器
Feb 18 #Javascript
AngularJS 2.0新特性有哪些
Feb 18 #Javascript
JavaScript+canvas实现七色板效果实例
Feb 18 #Javascript
javascript结合Flexbox简单实现滑动拼图游戏
Feb 18 #Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
Feb 18 #Javascript
iscroll.js的上拉下拉刷新时无法回弹的解决方法
Feb 18 #Javascript
You might like
PHP无敌近乎加密方式!
2010/07/17 PHP
PHP header()函数使用详细(301、404等错误设置)
2013/04/17 PHP
『PHP』PHP截断函数mb_substr()使用介绍
2013/04/22 PHP
php Session无效分析资料整理
2016/11/29 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
Thinkphp5框架异常处理操作实例分析
2020/06/03 PHP
PHP中的异常处理机制深入讲解
2020/11/10 PHP
JS画5角星方法介绍
2013/09/17 Javascript
javascript模拟C#格式化字符串
2015/08/26 Javascript
详解js中构造流程图的核心技术JsPlumb(2)
2015/12/08 Javascript
JavaScript中ES6 Babel正确安装过程
2016/07/18 Javascript
jQuery实现的表格展开伸缩效果实例
2016/09/07 Javascript
js实现二级导航功能
2017/03/03 Javascript
Angular.Js中ng-include指令的使用与实现
2017/05/07 Javascript
基于Bootstrap模态对话框只加载一次 remote 数据的解决方法
2017/07/09 Javascript
nodejs实现简单的gulp打包
2017/12/21 NodeJs
babel的使用及安装配置教程
2018/02/22 Javascript
JS求Number类型数组中最大元素方法
2018/04/08 Javascript
微信小程序中target和currentTarget的区别小结
2020/11/06 Javascript
[41:20]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS DK
2014/05/26 DOTA
[01:04:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第二场 1月31日
2021/03/11 DOTA
python重试装饰器示例
2014/02/11 Python
Redis使用watch完成秒杀抢购功能的代码
2018/05/07 Python
django反向解析URL和URL命名空间的方法
2018/06/05 Python
解决PyCharm的Python.exe已经停止工作的问题
2018/11/29 Python
Python数据集切分实例
2018/12/08 Python
python实现nao机器人手臂动作控制
2019/04/29 Python
python中pdb模块实例用法
2021/01/15 Python
解决HTML5手机端页面缩放的问题
2017/10/27 HTML / CSS
美国娱乐和流行文化商品店:FYE
2017/09/14 全球购物
长曲棍球装备:Lacrosse Monkey
2020/12/02 全球购物
毕业自荐信
2013/12/16 职场文书
网络编辑职责
2014/03/01 职场文书
中药学专业毕业生推荐信
2014/07/10 职场文书
我的兄弟姐妹观后感
2015/06/15 职场文书
golang如何去除多余空白字符(含制表符)
2021/04/25 Golang