zoukankan      html  css  js  c++  java
  • 省市区三级联动——思路、demo、示例

    说明(2017-12-13 11:03:58):

    1. 这个功能应该是注册的时候非常、常用的了,不过现在都是微信登录,手机端自动获取位置什么的,可能就网站还用用吧!

    2. 这个东西的难点在于统计各地省、市、自治区、以及茫茫多的地级市,是用数组还是json存?其实都可以,但要自己写,估计写两个省就跪了,真的是非常之多啊!所以无奈只能用别人写好的数组或json,而你一旦用了别人的数组或json,你就很难不用别人配套的js代码了,那我自己还写个J8啊!

    3. 其实主要是为了了解一下三级联动的思路,学习一下jquery的简单操作。另外,毕竟别人写的,跟自己的需求有些出入,有些地方得知道怎么改。

    4. 虽然最后还是用了别人的代码,哇哈哈哈哈!实在是不想自己创建省市数组!而且人家也没用jquery,用的原生js。虽然我也只是用了几个jquery的选择器。。

    下面是自己写的demo,要引用jquery:

    city.html

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
    </head>
    <body>
        <select id="province">
            <option value="value">选择省</option>
            <!--<option value="value">北京</option>
            <option value="value">山东</option>-->
        </select>
        <select id="city">
            <option value="value">选择市</option>
        </select>
        <select id="district">
            <option value="value">选择区</option>
        </select>
    </body>
    <script src="jquery1.11.3.js" type="text/javascript"></script>
    <script src="city.js" type="text/javascript"></script>
    <script type="text/javascript">
        //获取省、市、区select节点
        var province = $("#province");
        var city = $("#city");
        var district = $("#district");
        //提前定义动态变量市、区
        var cities;
        var districts;
        //定义省、市下标
        var p_num;
        var c_num;
        //添加省
        for (var i = 0; i < provinces.length; i++) {
            province.append("<option value='value'>" + provinces[i] + "</option>");
        }
        //选择省后,添加市(如果点“选择省”,清空市区)(如果没查到对应的市,默认填充为“选择市”)
        province.change(function () {
            //先清空市、区
            city.empty();
            district.empty();
            city.append("<option value='value'>选择市</option>");
            district.append("<option value='value'>选择区</option>");
            var p = province.find("option:selected").text();
            if (p == "选择省") {
                city.empty();
                city.append("<option value='value'>选择市</option>");
            } else {
                //查找选择的省的下标
                for (var i in provinces) {
                    if (provinces[i] == p) {
                        p_num = i;
                    }
                }
                //网上一堆说eval不行的,不安全的,有很多替代方法的。麻痹找了一顿也没找到,我就用eval了!
                //动态查找市的变量名,显示
                cities = eval("p" + p_num);
                for (var i in cities) {
                    city.append("<option value='value'>" + cities[i] + "</option>");
                }
            }
        }
        );
        //选择市后,添加区(如果点“选择市”,清空区)(如果没查到对应的区,默认填充为“选择区”)
        city.change(function () {
            var c = city.find("option:selected").text();
            if (c == "选择市") {
                district.empty();
                district.append("<option value='value'>选择区</option>");
            } else if ($.inArray(c, cities)) {
                //jquery的inarray方法,判断某个元素是不是在数组中
                district.empty();
                district.append("<option value='value'>选择区</option>");
            } else {
                for (var i in cities) {
                    if (c == cities[i]) {
                        c_num = i;
                    }
                }
                //            alert("p" + p_num + "_" + c_num);
                districts = eval("p" + p_num + "_" + c_num);
                for (var i in districts) {
                    district.append("<option value='value'>" + districts[i] + "</option>");
                }
            }
    
        });
    </script>
    </html>

    city.js

    var provinces = ["山东", "北京"];
    var p0 = ["济南市", "青岛市", "淄博市", "枣庄市"];
    var p0_0 = ["市中区", "历下区", "天桥区", "槐荫区"];
    var p0_1 = ["市南区", "市北区", "李沧区", "四方区"];
    var p1 = ["北京"];
    var p1_0 = ["东城", "西城", "海淀", "朝阳"];

    补充:

    1. 网上有人说可以这么写,变量中可以存储数组,但是这样有一个问题,如果有两个省份,有两个重名的市,那数组就会重名,比如北京的朝阳区,和辽宁的朝阳市,不过这俩可以通过区和市分成两个数组,但是其他地方有没有重名的市我就没做过调查了,应该说是有风险的。

    var provinces = ["山东", "北京"];
    Array["山东"] = ["济南市", "青岛市", "淄博市", "枣庄市"];
    Array["济南市"] = ["市中区", "历下区", "天桥区", "槐荫区"];
    Array["青岛市"] = ["市南区", "市北区", "李沧区", "四方区"];
    Array["北京"] = ["北京市"];
    Array["北京市"] = ["东城", "西城", "海淀", "朝阳"];

    2. 我是用了纯数组的办法,一般网上比较好的示例都是用的json,比如下面这个,我就准备抄这个了:

    纯JS省市区三级联动

  • 相关阅读:
    第06组 Alpha冲刺(4/6)
    第06组 Alpha冲刺(3/6)
    第06组 Alpha冲刺(2/6)
    第06组 Alpha冲刺(1/6)
    第06组 团队Git现场编程实战
    团队项目-需求分析报告
    团队项目-选题报告
    洛谷3195 玩具装箱(dp,斜率优化)
    CF 1334(edu85) F. Strange Function(线段树,dp)
    CF1325E. Ehab's REAL Number Theory Problem(最小环)
  • 原文地址:https://www.cnblogs.com/Jacklovely/p/8031990.html
Copyright © 2011-2022 走看看