收货地址三级联动
项目中碰到的需求......
这些大家都很熟悉了,就直接贴代码吧.
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 () {//回调 });
准备大过年的,还要敲代码,真心伤不起......