js实现省市县三级联动

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>js实现省市县--三级联动</title>
</head>
<body>
    <div>
        选择省份:
        <select style=" 100px;" id="pre" onchange="shengfen(this);">
            <option value="-1" selected="selected">---请选择---</option>
        </select>
        选择市区:
        <select style=" 100px;" id="city" onchange="shiqu(this)">
            <option selected="selected">---请选择---</option>
        </select>
        选择县城:
        <select style=" 100px;" id="area">
            <option selected="selected">---请选择---</option>
        </select>
    </div>

    <script>
        //声明省
        var pres = ["湖南省", "广东省", "河北省",'江西省','海南省','湖北省']; //直接声明Array
        //声明市
        var cities = [
            ["长沙市", "岳阳市", "吉首市"],  //湖南省内的市区
            ["深圳市", "广州市"],      //广东省内的市区
            ["石家庄市", "李家庄2市"], //河北省内的市区
        ];
        var areas = [
                [
                    ["长沙县1", "长沙县2", "长沙县3"], //长沙市内的县城
                    ["岳阳县1", "岳阳县1", "岳阳县1"], //岳阳县内的县城
                    ["花垣县", "龙潭县", "龙山县",'秀山县']   //吉首市内的县城
                ],
                [
                    ["深圳县1", "深圳县2", "深圳县3"], //*******
                    ["广州县1", "广州县2", "广州县3"]
                ],
                [
                    ["石家庄县1", "石家庄县2"],
                    ["李家庄县1", "李家庄县2"]
                ]
        ]
        //设置一个省的公共下标
        var pIndex = -1;
        var preEle = document.getElementById("pre");
        var cityEle = document.getElementById("city");
        var areaEle = document.getElementById("area");

        //先设置省的值
        for (var i = 0; i < pres.length; i++) {
            //声明option.<option value="pres[i]">Pres[i]</option>
            var op = new Option(pres[i], i);
            //添加
            preEle.options.add(op);
        }
        //省份方法
        function shengfen(obj) {
            //alert("省份的下标:"+obj.value);//省份下标,从0开始
            if (obj.value == -1) {
                cityEle.options.length = 0;
                areaEle.options.length = 0;
            }
            //alert("this:" + cityEle.options.length);

            //获取值
            var sheng = obj.value; //获取省份的下标
            //alert("省份的下标:"+sheng);
            pIndex = obj.value;
            //获取ctiry
            var cs = cities[sheng];//把省份的下标放入市区的数组
            
            var as = areas[sheng][0];//获取默认区
            //先清空市
            cityEle.options.length = 0;
            areaEle.options.length = 0;
            for (var i = 0; i < cs.length; i++) {
                var op = new Option(cs[i], i);
                cityEle.options.add(op);
            }
            for (var i = 0; i < as.length; i++) {
                var op = new Option(as[i], i);
                areaEle.options.add(op);
            }
        }
        //市区方法
        function shiqu(obj) {
            var shi = obj.selectedIndex;
            var as = areas[pIndex][shi];
            areaEle.options.length = 0;
            for (var i = 0; i < as.length; i++) {
                var op = new Option(as[i], i);
                areaEle.options.add(op);
            }
        }
    </script>
</body>
</html>
原文地址:https://www.cnblogs.com/threeblue/p/12768551.html