area-dialog-1.0.0.js 3.53 KB
(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
})();