81041
2018-12-21 8f41037bbf6eed26c81894efe8a1451a46f32622
gx_tieta/WebRoot/pages/js/mylayui.js
@@ -251,3 +251,141 @@
   }
};
// 省-市-区联动
var LinkAge = function(url, province, city, county, callback) {
    this.province = province;
    this.city = city;
    this.county = county;
    this.url = url;
    this.callback= callback;
    this.data = {};
    this._init();
};
LinkAge.prototype = {
    _init: function() {
       // 设置回调函数
       if(typeof this.callback === 'function') {
            this.callback = this.callback;
        }else {
            this.callback = function() {};
        }
        this._setData();
        this._updateDom();
        // this._addEvent();
    }
    ,_setData: function() {
        var _this = this;
        // 请求json数据
        $.ajax({
            type: 'post'
            ,async: false
            ,url: this.url
            ,data: null
            ,dataType: 'json'
            ,success: function(res) {
                _this.data = res;
            },
            error: function(res) {
                console.log(res)
            }
        });
    }
    ,_getProvinces: function() {
        var provinces = this._analyseData(this.data);
        return provinces;
    }
    ,_getCities: function(province) {
        var cities = this.data[province].child;
        var rsCities = this._analyseData(cities);
        return rsCities;
    }
    ,_getCounty: function(province, city) {
        var cities = this.data[province].child;
        var counties = cities[city].child;
        var rsCounties = this._analyseData(counties);
        return rsCounties;
    }
    ,_analyseData: function(data) {
        var rsData = [];
        // 解析数据
        Object.keys(data).forEach(function(key) {
            var _data = data[key];
            if(_data)
            var tmp = {
                id: key
                ,name: _data.name
            };
            if(!_data.child && _data == '市辖区') {
            }else {
                tmp.id = key;
                tmp.name = _data.child?_data.name:_data;
                rsData.push(tmp);
            }
        });
        return rsData;
    }
    ,_updateDom: function() {
        // 省
        var proData = this._getProvinces();
        var proOptions = this._createDom(proData);
        this.province.html(proOptions);
        // 市
        var citiesData = this._getCities(this.province.find('option:selected').attr('num'));
        var citiesOptions = this._createDom(citiesData);
        this.city.html(citiesOptions);
        // 区/县
        var countiesData = this._getCounty(this.province.find('option:selected').attr('num'), this.city.find('option:selected').attr('num'));
        var countiesOptions = this._createDom(countiesData);
        this.county.html(countiesOptions);
        this.callback();
    }
    ,_createDom: function(data) {
        var options = '';
        for(var i=0; i<data.length; i++) {
            var _data = data[i];
            options += '<option num="'+_data.id+'" value="'+_data.name+'">'+_data.name+'</option>';
        }
        return options;
    }
    ,_addEvent: function() {
        var _this = this;
        // 切换省调整市和区/县
        this.province.off('change.LinkAge.event').on('change.LinkAge.event', function() {
            var val = $(this).find('option:selected').attr('num');
            console.log(val);
            // 市
            var citiesData = _this._getCities(val);
            var citiesOptions = _this._createDom(citiesData);
            _this.city.html(citiesOptions);
            // 区/县
            var countiesData = _this._getCounty(val, _this.city.find('option:selected').attr('num'));
            var countiesOptions = _this._createDom(countiesData);
            _this.county.html(countiesOptions);
            _this.callback();
        });
        // 切换市
        this.city.off('change.LinkAge.event').on('change.LinkAge.event', function() {
            var val = $(this).find('option:selected').attr('num');
            console.log(val);
            // 区/县
            var countiesData = _this._getCounty(_this.province.find('option:selected').attr('num'), val);
            var countiesOptions = _this._createDom(countiesData);
            _this.county.html(countiesOptions);
            _this.callback();
        });
    }
};