(function() { var e = function(i, s, n, d) { this.init(i, s, n, d); }; e.pos = null; e.title = ''; e.content = ''; e.dialog = null; e.areas = []; e.prototype = { init : function(i, s, n, d) { e.pos = i; e.title = s; e.content = n; for (k in d.group) { var a = d.group[k].areas; for (j in a) { e.areas[a[j].code] = a[j].title } } }, show : function() { // 显示弹出框 var a = this; y = $(this).scrollTop() - 300, x = $(e.pos).offset().left - 315; e.dialog = $(e.pos).dialog({ title: e.title, source: e.content, width:620, extendMainClass: 'dialog-areas', type:"html", closeButton: true, x: x, y: y, }); // 下面这两行代码,要在弹出框的内容加载完成以后才会有效 this.setDefault(); // 设置默认值 this.unbindClick(); // 解绑点击事件,避免重复绑定 this.bindClick(); // 绑定弹出框里面的点击事件 }, close : function() { // 关闭弹出框 e.dialog.close(); }, submit : function() { var a = this; var newCheckAreas = []; $('.J_Province:checked').each(function(i, n){ newCheckAreas.push($(n).val()) }); var d = a.changeCode(newCheckAreas); $(e.pos).next('.area-group').html(d.join(',')) $(e.pos).siblings('input').val(newCheckAreas.join(',')) a.close(); }, bindClick : function() { var a = this; $("body").on("click", ".J_Cancel", // click事件用on可以解决 function() { a.close(); } ) $("body").on("click", ".J_Submit", function() { a.submit(); } ) $("body").on("click", ".J_Group", function() { var o = this, c = $(o).prop("checked"), a = $(o).val().split(","); $.each(a, function(n, v) { if (!$("#J_Province_" + v).prop("disabled")) { $("#J_Province_" + v).prop("checked", c); } }) } ) }, unbindClick : function() { $("body").off("click", ".J_Cancel"); $("body").off("click", ".J_Submit") $("body").off("click", ".J_Group") }, changeCode : function (t) { var a = this, n = []; for (i in t) { n.push(e.areas[t[i]]) } return n; }, setDefault : function () { // 设置当前rule的弹出框默认选中省份 var v = $(e.pos).siblings('input').val(); v = v ? v.split(',') : []; if (v.length) { $('.J_Province').each(function(i, o) { // 这里获取不到.J_Province,因为第一次弹出,代码运行到这里,弹出框里的加载内容还没有出来 if ($.inArray($(o).val(), v) !== -1) { $(o).prop('checked', true); } }) } // 把其他rule选中省份disabled var d = [], i = $(e.pos).parents('tr')[0], targetName = $(e.pos).siblings('input').prop('name'); s = $('.J_Checked_Provinces').not('input[name='+targetName+']'); s && s.each(function(){ var j = $(this).val(); j = j ? j.split(',') : []; if (j.length) { d = d.concat(j) } }) if (d.length) { $('.J_Province').each(function(i, o) { if ($.inArray($(o).val(), d) !== -1) { $(o).prop('disabled', true); } }) } // 如果地区所有省份都选择,地区也被disable $('.J_Group').each(function(i, o) { var i = $(o).val(), a = $(o).parents('.ecity')[0], b = $(a).siblings('.province-list').find('.J_Province'), c = []; $(b).each(function(){ if ($(this).prop('disabled')) { c.push($(this).val()); } }) c = c.join(","); if (c == i) { $(o).prop('disabled', true) } }) } } window.AreaDialog = e })();