zoukankan      html  css  js  c++  java
  • js-案例 国家-省市-区域之间的三级联动

    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body onload="init()">
    <script>
        var arr = ["中国","美国","日本"] ;
    
        arr["中国"] = ["北京","上海","钓鱼岛"] ;
        arr["美国"] = ["纽约","华盛顿","旧金山"] ;
        arr["日本"] = ["东京","大阪","神户"] ;
    
        arr["北京"] = ["海淀","朝阳","昌平","丰台"] ;
        arr["上海"] = ["浦东","金山","崇明","浦西"] ;
        arr["钓鱼岛"] = ["钓鱼岛东","钓鱼岛南","钓鱼岛西","钓鱼岛北"] ;
    
        arr["纽约"] = ["纽约1","纽约2","纽约3","纽约4"] ;
        arr["华盛顿"] = ["华盛顿1","华盛顿2","华盛顿3","华盛顿4"] ;
        arr["旧金山"] = ["旧金山1","旧金山2","旧金山3","旧金山4"] ;
    
        arr["东京"] = ["东京1","东京2","东京3","东京4"] ;
        arr["大阪"] = ["大阪1","大阪2","大阪3","大阪4"] ;
        arr["神户"] = ["神户1","神户2","神户3","神户4"] ;
    /*
    function init(){//默认是第一个国家第一个省市第一个地区
        for(var i=0; i<arr.length;i++){//为国家的select填充数据
            var option = new Option();//为select创建option并对它进行初始化
            option.text=arr[i];
            option.value=arr[i];
            //把option添加到select中去,注意options是默认的装option的数组,此处只能用add(),不能用push()
            document.getElementById("country").options.add(option);
        }
    
        for(var i=0; i<arr[arr[0]].length;i++){//arr["中国"].length,"中国"在arr数组中的第0个元素
            var option = new Option();//为select创建option并对它进行初始化
            option.text=arr[arr[0]][i];
            option.value=arr[arr[0]][i];
            //把option添加到select中去,注意options是默认的装option的数组,此处只能用add(),不能用push()
            document.getElementById("province").options.add(option);
        }
    
        for(var i=0; i<arr[arr[arr[0]][0]].length;i++){//arr["北京"].length==arr[arr["中国"][0]]==arr[arr[arr[0][0]]
            var option = new Option();//为select创建option并对它进行初始化
            option.text=arr[arr[arr[0]][0]][i];
            option.value=arr[arr[arr[0]][0]][i];
            //把option添加到select中去,注意options是默认的装option的数组,此处只能用add(),不能用push()
            document.getElementById("area").options.add(option);
        }
    }*/
    //通过观察发现每个for循环只有arr 和id不同,所以我们可以抽取一个方法,那么就会少写很多代码
        function fillData(arr,id){
            document.getElementById(id).options.length=0;//清空数组
            for(var i=0; i<arr.length;i++){
                var option = new Option();//var option = new Option(arr[i],arr[i]);
                option.text=arr[i];
                option.value=arr[i];
                document.getElementById(id).options.add(option);
            }
        }
    
        function init(){
            fillData(arr,"country");//把arr数组中的数据填充到id为country的selec中
            fillData(arr[arr[0]],"province");//arr["中国"]里的数据--->省市栏
            fillData(arr[arr[arr[0]][0]],"area");//arr["北京"]里的数据填充到地区栏
        }
    
        function changePro(countryValue){//传递国家的value
            fillData(arr[countryValue],"province");//把国家数组中数据填充到省市中
            fillData(arr[arr[countryValue][0]],"area");// 省市数据填充到区域,arr[countryValue][0],0表示显示每个国家的对应的省市里面的第一个省市
        }
    
        function changeArea(provinceValue){//把省市数组中的数据填充到区域中
            fillData(arr[provinceValue],"area");
        }
    
    </script>
    国家:<select id="country" onchange="changePro(this.value)"></select>   
    省市:<select id="province" onchange="changeArea(this.value)"></select>  
    地区:<select id="area" ></select>
    </body>
    </html>
    

      

  • 相关阅读:
    物联网数据卡系统源码——物联网的主要应用领域
    一张图看懂开源许可协议,开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别
    memcached对key和value的限制 memcached的key最大长度和Value最大长度
    缓存技术PK:选择Memcached还是Redis?
    .Net开源框架列表
    项目管理工具Redmine各功能测试
    DBImport V3.7版本发布及软件稳定性(自动退出问题)解决过程分享
    ASP.NET Core 折腾笔记一
    发布:.NET开发人员必备的可视化调试工具(你值的拥有)
    开源发布:VS代码段快捷方式及可视化调试快速部署工具
  • 原文地址:https://www.cnblogs.com/bravolove/p/5503666.html
Copyright © 2011-2022 走看看