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 相关文章推荐
js 新浪的一个图片播放图片轮换效果代码
Jul 15 Javascript
Extjs中DisplayField的日期或者数字格式化扩展
Sep 03 Javascript
jQuery 源码分析笔记(2) 变量列表
May 28 Javascript
JavaScript 选中文字并响应获取的实现代码
Aug 28 Javascript
灵活的理解JavaScript中的this指向
Feb 25 Javascript
JavaScript接口的实现三种方式(推荐)
Jun 14 Javascript
Jquery获取当前城市的天气信息
Aug 05 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
Aug 18 Javascript
15个非常实用的JavaScript代码片段
Dec 18 Javascript
解决Vue打包之后文件路径出错的问题
Mar 06 Javascript
浅谈开发eslint规则
Oct 01 Javascript
vue实现路由不变的情况下,刷新页面操作示例
Feb 02 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中一个控制字符串输出的函数
2006/10/09 PHP
Laravel中服务提供者和门面模式的入门介绍
2017/11/06 PHP
jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
2011/10/24 Javascript
使用js如何实现全选与全不选
2013/12/30 Javascript
escape函数解决js中ajax传递中文出现乱码问题
2014/10/30 Javascript
为何JS操作的href都是javascript:void(0);呢
2015/11/12 Javascript
jQuery div拖拽用法实例
2016/01/14 Javascript
Jquery遍历select option和添加移除option的实现方法
2016/08/26 Javascript
Bootstrap模态窗口源码解析
2017/02/08 Javascript
JS打开摄像头并截图上传示例
2017/02/18 Javascript
解决VUE框架 导致绑定事件的阻止冒泡失效问题
2018/02/24 Javascript
微信小程序实现跑马灯效果
2020/10/21 Javascript
微信小程序时间选择插件使用详解
2018/12/28 Javascript
js实现鼠标拖拽div左右滑动
2020/01/15 Javascript
Vue状态模式实现窗口停靠功能(灵动、自由, 管理后台Admin界面)
2020/03/06 Javascript
JavaScript 类的封装操作示例详解
2020/05/16 Javascript
[01:08]DOTA2次级职业联赛 - Wings 战队宣传片
2014/12/01 DOTA
[43:57]LGD vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
vc6编写python扩展的方法分享
2014/01/17 Python
python实现从字符串中找出字符1的位置以及个数的方法
2014/08/25 Python
Python实现发送QQ邮件的封装
2017/07/14 Python
JS设计模式之责任链模式实例详解
2018/02/03 Python
NumPy 如何生成多维数组的方法
2018/02/05 Python
python opencv3实现人脸识别(windows)
2018/05/25 Python
Python为何不能用可变对象作为默认参数的值
2019/07/01 Python
python opencv如何实现图片绘制
2020/01/19 Python
全球独特生活方式产品和礼品购物网站:AHAlife
2018/09/18 全球购物
成人高等教育毕业生自我鉴定
2013/10/22 职场文书
建材投资建议书
2014/05/16 职场文书
2014年学生会生活部工作总结
2014/11/07 职场文书
避暑山庄导游词
2015/02/04 职场文书
数学教师个人总结
2015/02/06 职场文书
小学六一主持词开场白
2015/05/28 职场文书
python爬虫之爬取笔趣阁小说
2021/04/22 Python
厉害!这是Redis可视化工具最全的横向评测
2021/07/15 Redis
Python使用pandas导入xlsx格式的excel文件内容操作代码
2022/12/24 Python