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第一天(Jquery学习笔记)
May 11 Javascript
js弹出确认是否删除对话框
Mar 27 Javascript
Firefox中使用outerHTML的2种解决方法
Jun 07 Javascript
JS实现自动变化的导航菜单效果代码
Sep 09 Javascript
json实现添加、遍历与删除属性的方法
Jun 17 Javascript
javascript中获取class的简单实现
Jul 12 Javascript
AngularJS入门教程之过滤器详解
Aug 19 Javascript
vue component组件使用方法详解
Jul 14 Javascript
webpack4 css打包压缩问题的解决
May 18 Javascript
Vue.js组件高级特性实例详解
Dec 24 Javascript
详解Vue用cmd创建项目
Feb 12 Javascript
JQuery表单元素取值赋值方法总结
May 12 jQuery
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 Session 变量的使用方法详解与实例代码
2013/09/11 PHP
学习php设计模式 php实现抽象工厂模式
2015/12/07 PHP
PHP Swoole异步读取、写入文件操作示例
2019/10/24 PHP
在UpdatePanel内jquery easyui效果失效的解决方法
2010/04/11 Javascript
JS.getTextContent(element,preformatted)使用介绍
2013/09/21 Javascript
ExtJS实现文件下载的方法实例
2013/11/09 Javascript
使用jquery 简单实现下拉菜单
2015/01/14 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
2016/03/28 Javascript
javascript制作照片墙及制作过程中出现的问题
2016/04/04 Javascript
全面解析jQuery $(document).ready()和JavaScript onload事件
2016/06/08 Javascript
Vue数据驱动模拟实现3
2017/01/11 Javascript
使用JavaScript触发过渡效果的方法
2017/01/19 Javascript
nodejs搭建本地服务器轻松解决跨域问题
2018/03/21 NodeJs
js实现鼠标拖拽缩放div实例代码
2019/03/25 Javascript
详解如何在Vue项目中导出Excel
2019/04/19 Javascript
vue组件间通信六种方式(总结篇)
2019/05/15 Javascript
Python 解析XML文件
2009/04/15 Python
使用python实现拉钩网上的FizzBuzzWhizz问题示例
2014/05/05 Python
Python Requests库基本用法示例
2018/08/20 Python
Django实现基于类的分页功能
2019/10/31 Python
Python新建项目自动添加介绍和utf-8编码的方法
2020/12/26 Python
python自动化办公操作PPT的实现
2021/02/05 Python
html svg生成环形进度条的实现方法
2019/09/23 HTML / CSS
澳大利亚领先的睡衣品牌:Peter Alexander
2016/08/16 全球购物
会计专业自我鉴定范文
2013/12/29 职场文书
财务工作者先进事迹材料
2014/01/17 职场文书
《自然之道》教学反思
2014/02/11 职场文书
2014年社区植树节活动方案
2014/02/28 职场文书
汽车促销活动方案
2014/03/31 职场文书
设计专业毕业生求职信
2014/06/25 职场文书
不听老师话的万能检讨书
2014/10/04 职场文书
2015年街道办事处工作总结
2015/05/22 职场文书
出生证明范本
2015/06/15 职场文书
2016年公司“3.12”植树节活动总结
2016/03/16 职场文书
Vue实现tab导航栏并支持左右滑动功能
2021/06/28 Vue.js
vue使用wavesurfer.js解决音频可视化播放问题
2022/04/04 Vue.js