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 相关文章推荐
贴一个在Mozilla中常用的Javascript代码
Jan 09 Javascript
一些常用的JS功能函数(2009-06-04更新)
Jun 04 Javascript
javascript针对cookie的基本操作实例详解
Nov 30 Javascript
jQuery mobile 移动web(4)
Dec 20 Javascript
纯js实现手风琴效果
Apr 17 Javascript
BootStrap Typeahead自动补全插件实例代码
Aug 10 Javascript
jQuery实现表格元素动态创建功能
Jan 09 Javascript
简单谈谈React中的路由系统
Jul 25 Javascript
Vue兼容ie9的问题全面解决方案
Jun 19 Javascript
监听angularJs列表数据是否渲染完毕的方法示例
Nov 07 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
Oct 23 jQuery
如何编写一个 Webpack Loader的实现
Oct 18 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下载CSS文件中的图片的代码
2013/09/24 PHP
用脚本调用样式的几种方法
2006/12/09 Javascript
Javascript 自适应高度的Tab选项卡
2011/04/05 Javascript
Ubuntu中搭建Nodejs开发环境过程分享
2014/06/01 NodeJs
javascript中的Function.prototye.bind
2015/06/25 Javascript
基于JavaScript代码实现自动生成表格
2016/06/15 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
2017/02/03 Javascript
Boostrap栅格系统与自己额外定义的媒体查询的冲突问题
2017/02/19 Javascript
Javascript调试之console对象——你不知道的一些小技巧
2017/07/10 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
2020/10/22 Javascript
[00:14]PWL:老朋友Mushi拍VLOG与中国玩家问好
2020/11/04 DOTA
python中的多线程实例教程
2014/08/27 Python
python通过wxPython打开一个音频文件并播放的方法
2015/03/25 Python
Python开发之快速搭建自动回复微信公众号功能
2016/04/22 Python
python之virtualenv的简单使用方法(必看篇)
2017/11/25 Python
Python在groupby分组后提取指定位置记录方法
2018/04/20 Python
Python学习笔记之open()函数打开文件路径报错问题
2018/04/28 Python
python之文件读取一行一行的方法
2018/07/12 Python
Python利用递归实现文件的复制方法
2018/10/27 Python
python+flask实现API的方法
2018/11/21 Python
python 将大文件切分为多个小文件的实例
2019/01/14 Python
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
2019/02/28 Python
django框架单表操作之增删改实例分析
2019/12/16 Python
logging level级别介绍
2020/02/21 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
2020/04/16 Python
如何查看Django ORM执行的SQL语句的实现
2020/04/20 Python
Python爬取微信小程序通用方法代码实例详解
2020/09/29 Python
HTML5之SVG 2D入门8—文档结构及相关元素总结
2013/01/30 HTML / CSS
经典英文广告词
2014/03/18 职场文书
法人授权委托书
2014/09/16 职场文书
2014党员民主评议个人思想剖析发言
2014/09/19 职场文书
2016十一国庆节感言
2015/12/09 职场文书
教师远程培训心得体会
2016/01/09 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python
如何在Python项目中引入日志
2021/05/31 Python
MySQL外键约束(Foreign Key)案例详解
2022/06/28 MySQL