jq完成省市区街道四级联动

之前看的省市区街道四级联动的插件,感觉和公司要求的有些不符合,就自己写了一个

因为要读取本地json文件,所以要跑下服务器

下载browser-sync

然后在项目目录下运行browser-sync start --server --file "**"

html

    <div>
        <div class="field">
            地址
        </div>
        <div id="area" class="field-value">
            <p>
                <select name="province">
                    <option value=""> - 请选择 - </option>
                </select>
                <select name="city" disabled>
                    <option value=""> - 请选择 - </option>
                </select>
                <select name="area" disabled>
                    <option value=""> - 请选择 - </option>
                </select>
                <select name="town" disabled>
                    <option value=""> - 请选择 - </option>
                </select>
            </p>
            <!-- <p id="place">请选择地区</p> -->
        </div>
    </div>

css

        .field-value {
            float: left;
        }
        .field-value select {
            width: 115.5px;
            height: 35px;
            border: 1px solid #dddddd;
            font-size: 14px;
        }

        .field-value option {
            width: 117.5px;
            height: 35px;
        }

js

$(document).ready(function () {
    var $this = $("#area");
    var $province = $this.find('select[name="province"]'),
        $city = $this.find('select[name="city"]'),
        $area = $this.find('select[name="area"]'),
        $town = $this.find('select[name="town"]');
    $.getJSON("./js/city.json", function (result) {
        console.log(result)
        if (result.rc == 0) {
            var formatProvince = [], provinceField = [], currentProvince = null, cityField = [], currentCity = null, areaField = [], currentArea = null, townField = [];
            formatProvince = result.data.province_list;
            formatProvince.map(function (value, index) {
                provinceField.push(value.area_name);
            })
            var format = {
                province: function () {
                    $province.empty();
                    $province.append('<option value=""> - 请选择 - </option>');
                    $province.prop('disabled', provinceField.length === 0);
                    for (var i in provinceField) {
                        $province.append('<option value="' + i + '" data-code="' + i + '">' + provinceField[i] + '</option>');
                    }
                    this.city();
                },
                city: function () {
                    $city.empty();
                    $city.append('<option value=""> - 请选择 - </option>');
                    $city.prop('disabled', cityField.length === 0);
                    for (var i in cityField) {
                        $city.append('<option value="' + i + '" data-code="' + i + '">' + cityField[i] + '</option>');
                    }
                    this.area();
                },
                area: function () {
                    $area.empty();
                    $area.append('<option value=""> - 请选择 - </option>');
                    $area.prop('disabled', areaField.length === 0);
                    for (var i in areaField) {
                        $area.append('<option value="' + i + '" data-code="' + i + '">' + areaField[i] + '</option>');
                    }
                    this.town();
                },
                town: function () {
                    $town.empty();
                    $town.append('<option value=""> - 请选择 - </option>');
                    $town.prop('disabled', townField.length === 0);
                    for (var i in townField) {
                        $town.append('<option value="' + i + '" data-code="' + i + '">' + townField[i] + '</option>');
                    }
                }

            };

            format.province();
            //事件绑定
            $province.on('change', function () {
                currentProvince = null, cityField = [], cityId = 0, currentCity = null, areaField = [], areaId = 0, currentArea = null, townField = [], townId = 0;
                currentProvince = formatProvince[$province.find('option:selected').attr('data-code')]
                provinceId = currentProvince.area_id;
                // cityId = currentProvince.city_list[0].area_id;
                currentProvince.city_list.map(function (value, index) {
                    cityField.push(value.area_name);
                });
                format.city();
            });
            $city.on('change', function () {
                currentCity = null, areaField = [], areaId = 0, currentArea = null, townField = [], townId = 0;
                currentCity = currentProvince.city_list[$city.find('option:selected').attr('data-code')]
                cityId = currentCity.area_id;
                // areaId=currentCity.county_list[0].area_id;
                currentCity.county_list.map(function (value, index) {
                    areaField.push(value.area_name);
                });
                format.area();
            });
            $area.on('change', function () {
                areaId = 0, currentArea = null, townField = [], townId = 0;
                currentArea = currentCity.county_list[$area.find('option:selected').attr('data-code')]
                areaId = currentArea.area_id;
                // townId =currentArea.town_list[0].area_id;
                currentArea.town_list.map(function (value, index) {
                    townField.push(value.area_name);
                });
                format.town();
                // console.log(townField)
            });
            $town.on('change', function () {
                townId = currentArea.town_list[$town.find('option:selected').attr('data-code')].area_id;
            })

        }
    })
});

运行结果

github代码:https://github.com/ouxiaojie18/-/tree/master/%E7%9C%81%E5%B8%82%E5%8C%BA%E8%A1%97%E9%81%93%E5%9B%9B%E7%BA%A7%E8%81%94%E5%8A%A8

posted @ 2018-09-28 15:17  mosquito~  阅读(3142)  评论(0编辑  收藏  举报