收货地址三级联动

项目中碰到的需求......

这些大家都很熟悉了,就直接贴代码吧.

    var AreaSelect = function () {
        var defaults = {
            url: port.getCODAreaByPid,
            sItem: null,
            tip: ['-请选择省-', '-请选择市-', '-请选择区/县-'],
            defaultCode: [$("#default_country"), $("#J-provinceCode"), $("#J-cityCode"), $("#J-countyCode")]//存放默认地址code的input元素,同tip对应
        }

        function assembly(obj) {
            var _str = [];
            for (var i = 0, _len = obj.length; i < _len; i++) {
                var _dot = obj[i].isCOD == '1' ? '*' : '';
                _str.push("<option value='" + obj[i].areaCode + "' cashOnDelivery='" + obj[i].isCOD + "'>" + _dot + obj[i].areaName + "</option>");
            }
            return _str.join('');
        }

        this.init = function (op) {
            $.extend(defaults, op || {});
            return this;
        }
        this.autoSelect = function (callback) {
            var Sobj = this;
            defaults.sItem.each(function (index) {
                var level = index + 2;
                var $self = $(this);
                $self.on('change', function () {
                    $self.val() != '0' && (index + 1) != defaults.sItem.length ? ($.post(defaults.url, {parentCode: $self.val(), level: level}, function (data) {
                        defaults.sItem.eq(index + 1).html("<option value='-1'>" + defaults.tip[index + 1] + "</option>" + assembly(data));
                    }), Sobj.resetSelect(index + 2), callback.call(this)) : callback.call(this);
                });
            });
            return this;
        }
        this.defaultSelect = function () {
            defaults.sItem.each(function (index) {
                var $self = $(this);
                var _code = defaults.defaultCode[index].val();
                var _uCode = defaults.defaultCode[index + 1].val();
                _code != 'undefined' ? $.post(defaults.url, {parentCode: _code}, function (data) {
                    var _s=assembly(data);
                    $self.html("<option value='-1'>" + defaults.tip[index] + "</option>" +_s).val(_uCode);
                }) : false;
            });
            return this;
        }
        this.resetSelect = function (s) {
            for (var i = s, _len = defaults.sItem.length; i < _len; i++) {
                defaults.sItem.eq(i).empty().html("<option value='-1'>" + defaults.tip[i] + "</option>");
            }
        }
    }

用例:

 //地址三级联动用例
    var mlwAdsSelect = new AreaSelect();
    mlwAdsSelect.init({sItem: $('div.select-grid select')}).defaultSelect().autoSelect(function () {//回调
});

准备大过年的,还要敲代码,真心伤不起......

posted @ 2014-01-20 17:26  卡布其诺猫  阅读(701)  评论(0编辑  收藏  举报