美文网首页
JQ三级联动

JQ三级联动

作者: 感觉不错哦 | 来源:发表于2018-12-06 13:51 被阅读35次

    准备工作复制我的代码即可

    地区数据 area.js

        var provinceList = [
            {name:'浙江', cityList:[
                {name:'杭州市', areaList:['上城区','下城区','江干区','拱墅区','西湖区','滨江区','萧山区','余杭区','桐庐县','淳安县','建德市','富阳市','临安市']},
                {name:'宁波市', areaList:['海曙区','江东区','江北区','北仑区','镇海区','鄞州区','象山县','宁海县','余姚市','慈溪市','奉化市']},
                {name:'温州市', areaList:['鹿城区','龙湾区','瓯海区','洞头县','永嘉县','平阳县','苍南县','文成县','泰顺县','瑞安市','乐清市']},
                {name:'嘉兴市', areaList:['秀城区','秀洲区','嘉善县','海盐县','海宁市','平湖市','桐乡市']},
                {name:'湖州市', areaList:['吴兴区','南浔区','德清县','长兴县','安吉县']},
                {name:'绍兴市', areaList:['越城区','绍兴县','新昌县','诸暨市','上虞市','嵊州市']},
                {name:'金华市', areaList:['婺城区','金东区','武义县','浦江县','磐安县','兰溪市','义乌市','东阳市','永康市']},
                {name:'衢州市', areaList:['柯城区','衢江区','常山县','开化县','龙游县','江山市']},
                {name:'舟山市', areaList:['定海区','普陀区','岱山县','嵊泗县']},
                {name:'台州市', areaList:['椒江区','黄岩区','路桥区','玉环县','三门县','天台县','仙居县','温岭市','临海市']},
                {name:'丽水市', areaList:['莲都区','青田县','缙云县','遂昌县','松阳县','云和县','庆元县','景宁畲族自治县','龙泉市']}
            ]},
            {name:'广东', cityList:[
                {name:'广州市', areaList:['东山区','荔湾区','越秀区','海珠区','天河区','芳村区','白云区','黄埔区','番禺区','花都区','增城市','从化市']},
                {name:'韶关市', areaList:['武江区','浈江区','曲江区','始兴县','仁化县','翁源县','乳源瑶族自治县','新丰县','乐昌市','南雄市']},
                {name:'深圳市', areaList:['罗湖区','福田区','南山区','宝安区','龙岗区','盐田区']},
                {name:'珠海市', areaList:['香洲区','斗门区','金湾区']},
                {name:'汕头市', areaList:['龙湖区','金平区','濠江区','潮阳区','潮南区','澄海区','南澳县']},
                {name:'佛山市', areaList:['禅城区','南海区','顺德区','三水区','高明区']},
                {name:'江门市', areaList:['蓬江区','江海区','新会区','台山市','开平市','鹤山市','恩平市']},
                {name:'湛江市', areaList:['赤坎区','霞山区','坡头区','麻章区','遂溪县','徐闻县','廉江市','雷州市','吴川市']},
                {name:'茂名市', areaList:['茂南区','茂港区','电白县','高州市','化州市','信宜市']},
                {name:'肇庆市', areaList:['端州区','鼎湖区','广宁县','怀集县','封开县','德庆县','高要市','四会市']},
                {name:'惠州市', areaList:['惠城区','惠阳区','博罗县','惠东县','龙门县']},
                {name:'梅州市', areaList:['梅江区','梅 县','大埔县','丰顺县','五华县','平远县','蕉岭县','兴宁市']},
                {name:'汕尾市', areaList:['主城区','海丰县','陆河县','陆丰市']},
                {name:'河源市', areaList:['源城区','紫金县','龙川县','连平县','和平县','东源县']},
                {name:'阳江市', areaList:['江城区','阳西县','阳东县','阳春市']},
                {name:'清远市', areaList:['清城区','佛冈县','阳山县','连山壮族瑶族自治县','连南瑶族自治县','清新县','英德市','连州市']},
                {name:'东莞市', areaList:['石龙镇','石排镇','茶山镇','企石镇','桥头镇','东坑镇','横沥镇','常平镇','虎门镇','长安镇','沙田镇','厚街镇','寮步镇','大岭山镇','大朗镇','黄江镇','樟木头镇','谢岗镇','塘厦镇','清溪镇','凤岗镇','麻涌镇','中堂镇','高埗镇','石碣镇','望牛墩镇','洪梅镇','道滘镇']},
                {name:'中山市', areaList:['石岐街道','东区街道','西区街道','南区街道','五桂山街道','火炬开发区','黄圃镇','南头镇','东凤镇','阜沙镇','小榄镇','东升镇','古镇镇','横栏镇','三角镇','民众镇','南朗镇','港口镇','大涌镇','沙溪镇','三乡镇','板芙镇','神湾镇','坦洲镇']},
                {name:'潮州市', areaList:['湘桥区','潮安县','饶平县']},
                {name:'揭阳市', areaList:['榕城区','揭东县','揭西县','惠来县','普宁市']},
                {name:'云浮市', areaList:['云城区','新兴县','郁南县','云安县','罗定市']}
            ]},
    
        ]
    

    从网上找了两条测试即可

        <!DOCTYPE html>
        <html>
        <head lang="en">
            <meta charset="UTF-8">
            <title></title>
            <style>
                select{
                    padding:5px 0;
                    }
                .outer{
                    width:500px;
                    margin:20px auto;
                    }
            </style>
        </head>
        <body>
        <div class="outer">
            <select  id="province">
                <option value="请选择">请选择</option>
            </select>
            <select id="city">
                <option value="请选择">请选择</option>
            </select>
            <select id="town">
                <option value="请选择">请选择</option>
            </select>
        </div>
        </body>
        <script src="http://www.jq22.com/jquery/jquery-1.10.2.js"></script>
        <script src="./area.js"></script> //引入上方数据
        <script>
    
        </script>
        </html>
    

    开始JS部分,此处用的jq是cdn 复制即可

        <script>
            var province=$("#province"),city=$("#city"),town=$("#town");  //取到三个select元素,记住了代表的元素
        </script>
    

    写个方法用来动态加载options

            function addSearch(el,value){  // el代表元素   value 表示我们获取的对象值
                var optionStr="";
                optionStr="<option value="+value+">"+value+"</option>";
                el.append(optionStr);//在元素后面添加标签
            }
    

    首先我们先加载省区

                for(var i=0;i<provinceList.length;i++){ //上方引入的js地区数组名,获取它的长度遍历
                  addSearch(province,provinceList[i].name);//这里的province表示 第一个id为province的select标签
                }
    

    当前的JS代码 如果看不懂JQ代码可以翻阅JQ在线手册

        <script>
            var province=$("#province"),city=$("#city"),town=$("#town");       
                function addSearch(el,value){
                    var optionStr="";
                    optionStr="<option value="+value+">"+value+"</option>";
                    el.append(optionStr);
                }
                for(var i=0;i<provinceList.length;i++){
                  addSearch(province,provinceList[i].name);
                }
        </script>
    

    我们看看效果


    省区已经加载出来了,这步没看懂的建议再浏览一下

    接下来做一个移除效果,当我们选择省区的时候,后面的两项清空,当我们选择第二项市区的时候,第三项清空,提前写一个方法方便调用
                function removeEl(el){
                    el.find("option").remove(); //清空el下的option元素
                    var optionStar="<option value="+"请选择"+">"+"请选择"+"</option>";
                    el.append(optionStar); //增加 请选择的选项 插入
                }
    

    接下来插入市区选项数据

                var provinceVal,cityVal,cityIndex; //定义三个全局变量  获取当前的数据 
                province.on('change',function(){
                   provinceVal=$(this).val();//获取当前的省区name
                   $.each(provinceList,function(i,item){ // 遍历循环provinceList数组 i 是索引 item是索引值
                    if(provinceVal==item.name){ //遍历数组,如果找到当前的省区与数组中的name对应
                        cityIndex=i;
                        return cityIndex   //停止循环 返回索引
                    }
                  }); //此时当我们选择省区时 确定了数组中的索引位置
                      //此时我们清空后面两个select的选择
                      removeEl(city);
                      removeEl(town);
                      //既然确认了索引 就可以添加数据到第二个select
                      $.each(provinceList[cityIndex].cityList,function(i,item){
                            addSearch(city,item.name)//将id为city的select标签增加option选项
                     })
                })
    

    此时页面效果

    第二个选项已经填充完成,并且改变第一个选项第二个选项会清空,此时的js代码

        <script>
            var province=$("#province"),city=$("#city"),town=$("#town");
       
                function addSearch(el,value){
                    var optionStr="";
                    optionStr="<option value="+value+">"+value+"</option>";
                    el.append(optionStr);
                }
                for(var i=0;i<provinceList.length;i++){
                  addSearch(province,provinceList[i].name);
                }
                function removeEl(el){
                    el.find("option").remove();
                    var optionStar="<option value="+"请选择"+">"+"请选择"+"</option>";
                    el.append(optionStar);
                }
                var provinceVal,cityVal,cityIndex; //定义三个全局变量  获取当前的数据 
                province.on('change',function(){ //当省区选项发生改变的时候
                   provinceVal=$(this).val();//获取当前的省区name
                   $.each(provinceList,function(i,item){ // 遍历循环provinceList数组 i 是索引 item是索引值
                    if(provinceVal==item.name){ //遍历数组,如果找到当前的省区与数组中的name对应
                        cityIndex=i;
                        return cityIndex   //停止循环 返回索引
                    }
                  }); //此时当我们选择省区时 确定了数组中的索引位置
                      //此时我们清空后面两个select的选择
                      removeEl(city);
                      removeEl(town);
                      //既然确认了索引 就可以添加数据到第二个select
                      $.each(provinceList[cityIndex].cityList,function(i,item){
                            addSearch(city,item.name)//将id为city的select标签增加option选项
                     })
                })
            
        </script>
    

    还差最后一个,其实很简单了,一样的逻辑

                city.on("change",function(){ //当市区选项发生改变的时候
                cityVal=$(this).val(); //获取当前的市区选项
                removeEl(town); //此时我们清空第三个select的option
                $.each(provinceList[cityIndex].cityList,function(i,item){//此时cityIndex依旧是之前的cityIndex,遍历该索引下的对象的cityList数组
                    if(cityVal == item.name){ //找到第二个select的val与数组中的val相同的 
                        for(var n=0;n<item.areaList.length;n++){ //遍历增加数据
                            addSearch(town,item.areaList[n])
                        }
                    }
                });
            });
    

    此时的js代码

        <script>
            var province=$("#province"),city=$("#city"),town=$("#town");
       
                function addSearch(el,value){
                    var optionStr="";
                    optionStr="<option value="+value+">"+value+"</option>";
                    el.append(optionStr);
                }
                for(var i=0;i<provinceList.length;i++){
                  addSearch(province,provinceList[i].name);
                  
                }
                function removeEl(el){
                    el.find("option").remove();
                    var optionStar="<option value="+"请选择"+">"+"请选择"+"</option>";
                    el.append(optionStar);
                }
                var provinceVal,cityVal,cityIndex; //定义三个全局变量  获取当前的数据 
                province.on('change',function(){
                   provinceVal=$(this).val();//获取当前的省区name
                   $.each(provinceList,function(i,item){ // 遍历循环provinceList数组 i 是索引 item是索引值
                    if(provinceVal==item.name){ //遍历数组,如果找到当前的省区与数组中的name对应
                        cityIndex=i;
                        return cityIndex   //停止循环 返回索引
                    }
                  }); //此时当我们选择省区时 确定了数组中的索引位置
                      //此时我们清空后面两个select的选择
                      removeEl(city);
                      removeEl(town);
                      //既然确认了索引 就可以添加数据到第二个select
                      $.each(provinceList[cityIndex].cityList,function(i,item){
                            addSearch(city,item.name)//将id为city的select标签增加option选项
                     })
                })
            
    
                city.on("change",function(){ //当市区选项发生改变的时候
                cityVal=$(this).val(); //获取当前的市区选项
                removeEl(town); //此时我们清空第三个select的option
                $.each(provinceList[cityIndex].cityList,function(i,item){//此时cityIndex依旧是之前的cityIndex,遍历该索引下的对象的cityList数组
                    if(cityVal == item.name){ //找到第二个select的val与数组中的val相同的 
                        for(var n=0;n<item.areaList.length;n++){ //遍历增加数据
                            addSearch(town,item.areaList[n])
                        }
                    }
                });
            });
    
        </script>
    

    主要是思路,可能你的后台是个新手,数据写的不是很好

    相关文章

      网友评论

          本文标题:JQ三级联动

          本文链接:https://www.haomeiwen.com/subject/wzzncqtx.html