首页 > 代码库 > 地址联动下拉框实现

地址联动下拉框实现

<head>
  <meta charset="UTF-8">
  <title>地址联动下拉框实现</title>
  <link rel="stylesheet" type="text/css" href="http://www.mamicode.com/reset.css">
  <link rel="stylesheet" type="text/css" href="http://www.mamicode.com/bootstrap.min.css">
  <script type="text/javascript" src="http://www.mamicode.com/citys.js"></script>
</head>
// head部分reset清除不同浏览器的差异,用bootstrap主要是因为下拉框太丑,大家也可以自制下拉框(如果需要兼容ie低版本的话)citys.js储存的是地址,省市县。下载地址是这个https://passport.baidu.com/js/sitedata_bas.js
<div class="container">
  <h2 class="header">地址联动下拉框</h2>
  <div class="form-group" id="main">
    <select class="form-control" style="width: 20%;float: left;">
    </select>
    <select class="form-control" style="width: 20%;float: left;">
    </select>
    <select class="form-control" style="width: 20%;float: left;">
    </select>
</div>
</div>
//body结构
//下面主讲一下思路,首先第一个下拉框要添加省的内容,当这个下拉框onchange时候第二个下拉框就跟着变,同理第二个下拉框onchange的时候第三一个就跟着变了。
<script type="text/javascript">
  window.onload = function (){
    var main = document.getElementById("main");
    var selects = main.getElementsByTagName("select");
    //注 arrCity 是citys.js中的 全国地址json数据
    //初始化省份,为第一个下拉框添加内容
    //ie8以下不兼容for in 可以采用for 循环
    //写之前先研究json的结构
    for( pro in arrCity){
      createOption(selects[0],arrCity[pro].name)
    }
    //创建 option的函数
     function createOption(parent,innerHTML){
        var option = document.createElement("option");
        option.innerHTML = innerHTML
        parent.appendChild(option);
     }
    //初始化完成、联动开始
    //第一个下拉框改变的时候
    var one = 0 //初始化省的选择位置
    selects[0].onchange = function (){
      //清空第二个和第三个下拉框
      selects[1].innerHTML = selects[2].innerHTML = ‘‘;
      for ( pro in arrCity){
        //判断选择的是哪个省份
        if (this.value =http://www.mamicode.com/= arrCity[pro].name) {
          // 省份变动
          one = pro;
          // 省份下面有一个sub数组是盛放市的
          for(city in arrCity[pro].sub){
            //添加市
            createOption(selects[1],arrCity[pro].sub[city].name);
          }
        }
      }
     }
    //第二个下拉框改变的时候
    selects[1].onchange = function (){
      //只有第三个下拉菜单清空
      selects[2].innerHTML = ‘‘;
      //判断选择的那个省 one已经帮我们记录了
      //判断哪个市
      for ( city in arrCity[one].sub){
        if (this.value =http://www.mamicode.com/= arrCity[one].sub[city].name) {
          // 市份下面有一个sub数组是盛放县的
          for( county in arrCity[one].sub[city].sub){
            //添加县
            createOption(selects[2],arrCity[one].sub[city].sub[county].name);
          }
        }
      }
    }
  }
</script>
//对于我的难点就json数据结构的处理,总的来说就是先看arrcity的结构在做处理,在实际操作的过程,程序返回值也是这个样子的,都需要我们进行加工还原成html结构。
//最后的结构是这个样子的
技术分享
这是本人第一篇博客,本人从小不擅长笔记,写的比较嘈杂,欢迎指正

地址联动下拉框实现