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对URL字符串进行编码/解码分析
Oct 25 Javascript
javascript 隔行换色函数代码
Oct 24 Javascript
Js数组的操作push,pop,shift,unshift等方法详细介绍
Dec 28 Javascript
禁用页面部分JavaScript方法的具体实现
Jul 31 Javascript
深入探究使JavaScript动画流畅的一些方法
Jun 30 Javascript
Bootstrap源码解读下拉菜单(4)
Dec 23 Javascript
AngularJS实现网站换肤实例
Feb 19 Javascript
JS动态生成年份和月份实例代码
Feb 04 Javascript
es6学习笔记之Async函数的使用示例
May 11 Javascript
浅谈ElementUI中switch回调函数change的参数问题
Aug 24 Javascript
Vue实现一个无限加载列表功能
Nov 13 Javascript
30分钟快速实现小程序语音识别功能
Nov 27 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
PHP $_FILES中error返回值详解
2014/01/30 PHP
微信支付PHP SDK之微信公众号支付代码详解
2015/12/09 PHP
PHP序列化的四种实现方法与横向对比
2018/11/29 PHP
css图片自适应大小
2007/11/28 Javascript
JavaScipt基本教程之前言
2008/01/16 Javascript
利用js实现选项卡的特别效果的实例
2013/03/03 Javascript
ie浏览器使用js导出网页到excel并打印
2014/03/11 Javascript
javascript实现控制的多级下拉菜单
2015/07/05 Javascript
写给小白的JavaScript引擎指南
2015/12/04 Javascript
老生常谈js动态添加事件--- 事件委托
2016/07/19 Javascript
JavaScript实现页面定时刷新(定时器,meta)
2016/10/12 Javascript
如何通过非数字与字符的方式实现PHP WebShell详解
2017/07/02 Javascript
基于BootStrap multiselect.js实现的下拉框联动效果
2017/07/28 Javascript
详解webpack require.ensure与require AMD的区别
2017/12/13 Javascript
iview table高度动态设置方法
2018/03/14 Javascript
微信小程序适配iphoneX的实现方法
2018/09/18 Javascript
Node.js API详解之 dns模块用法实例分析
2020/05/15 Javascript
vue 动态添加的路由页面刷新时失效的原因及解决方案
2021/02/26 Vue.js
[40:13]Ti4 冒泡赛第二天 iG vs NEWBEE 2
2014/07/15 DOTA
python用10行代码实现对黄色图片的检测功能
2015/08/10 Python
Python list操作用法总结
2015/11/10 Python
python使用KNN算法手写体识别
2018/02/01 Python
Django框架之登录后自定义跳转页面的实现方法
2019/07/18 Python
通过Python编写一个简单登录功能过程解析
2019/09/04 Python
Python函数式编程实例详解
2020/01/17 Python
Python socket处理client连接过程解析
2020/03/18 Python
python如何保存文本文件
2020/06/07 Python
企业读书活动总结
2014/06/30 职场文书
售房委托书
2014/08/30 职场文书
自愿解除劳动合同协议书
2014/09/11 职场文书
意外死亡赔偿协议书
2014/10/14 职场文书
申报材料格式
2014/12/30 职场文书
遗嘱继承权公证书
2015/01/26 职场文书
试用期自我评价怎么写
2015/03/10 职场文书
python blinker 信号库
2022/05/04 Python