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 相关文章推荐
基于Jquery的回车成tab焦点切换效果代码(Enter To Tab )
Nov 14 Javascript
JQuery插件Style定制化方法的分析与比较
May 03 Javascript
如何在一个页面显示多个百度地图
Apr 07 Javascript
使用javascript获取页面名称
Dec 23 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
Jun 04 Javascript
深入理解AngularJs-scope的脏检查(一)
Jun 19 Javascript
20170918 前端开发周报之JS前端开发必看
Sep 18 Javascript
JavaScript的级联函数用法简单示例【链式调用】
Mar 26 Javascript
js之切换全屏和退出全屏实现代码实例
Sep 09 Javascript
antd Form组件方法getFieldsValue获取自定义组件的值操作
Oct 29 Javascript
JS实现手风琴特效
Nov 08 Javascript
详解Vue中的自定义指令
Dec 07 Vue.js
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
Zend公司全球首推PHP认证
2006/10/09 PHP
jQuery 添加/移除CSS类实现代码
2010/02/11 Javascript
javascript 多浏览器 事件大全
2010/03/23 Javascript
再论Javascript的类继承
2011/03/05 Javascript
基于Jquery的仿照flash放大图片效果代码
2011/03/16 Javascript
利用javascript打开模态对话框(示例代码)
2014/01/11 Javascript
页面js遇到乱码问题的解决方法是和无法转码的情况
2014/04/30 Javascript
javascript模拟实现ajax加载框实例
2014/10/15 Javascript
Node.js异步I/O学习笔记
2014/11/04 Javascript
jQuery中unbind()方法用法实例
2015/01/19 Javascript
js控制文本框只输入数字和小数点的方法
2015/03/10 Javascript
jQuery实现的仿select功能代码
2015/08/19 Javascript
jQuery自定义动画函数实例详解(附demo源码)
2015/12/10 Javascript
CSS中position属性之fixed实现div居中
2015/12/14 Javascript
jquery实现文本框textarea自适应高度
2016/03/09 Javascript
JavaScript利用HTML DOM进行文档操作的方法
2016/03/28 Javascript
JavaScript几种数组去掉重复值的方法推荐
2016/04/12 Javascript
Java遍历集合方法分析(实现原理、算法性能、适用场合)
2016/04/25 Javascript
jQuery+ajax简单实现文件上传的方法
2016/06/03 Javascript
vue实现导航栏效果(选中状态刷新不消失)
2017/12/13 Javascript
详解vue服务端渲染浏览器端缓存(keep-alive)
2018/10/12 Javascript
深入学习JavaScript 高阶函数
2019/06/11 Javascript
vue-cli3+typescript新建一个项目的思路分析
2019/08/06 Javascript
Python Trie树实现字典排序
2014/03/28 Python
Python实现霍夫圆和椭圆变换代码详解
2018/01/12 Python
Python实现对特定列表进行从小到大排序操作示例
2019/02/11 Python
在python image 中安装中文字体的实现方法
2019/08/22 Python
python 通过视频url获取视频的宽高方式
2019/12/10 Python
PyQt5中多线程模块QThread使用方法的实现
2020/01/31 Python
Python浮点型(float)运算结果不正确的解决方案
2020/09/22 Python
今冬明春火灾防控工作方案
2014/05/29 职场文书
批评与自我批评发言稿
2014/10/15 职场文书
团员个人年度总结
2015/02/26 职场文书
《火烧云》教学反思
2016/02/23 职场文书
《语言的突破》读后感3篇
2019/12/12 职场文书
奇妙的 CSS shapes(CSS图形)
2021/04/05 HTML / CSS