jquery封装对话框插件

jquery.ui.dialog是一个友好的对话框插件,为了方便使用我们将使用jquery.ui.dialog封装一个易用的对话框插件,代码:

 

jQuery.extend(jQuery, { 
	// jQuery UI alert弹出提示 
	jqalert: function(text, title, fn) { 
		var html = 
		'<div class="dialog" id="dialog-message">' + 
		' <p>' + 
		' <span class="ui-icon ui-icon-circle-check" style="float: left; margin: 0 7px 0 0;"></span>' + text + 
		' </p>' + 
		'</div>'; 
		return $(html).dialog({ 
			//autoOpen: false, 
			resizable: false, 
			modal: true, 
			show: { 
				effect: 'fade', 
				duration: 300 
			}, 
			title: title || "提示信息", 
			buttons: { 
				"确定": function() { 
				var dlg = $(this).dialog("close"); 
				fn && fn.call(dlg); 
			} 
			} 
		}); 
	}, 
	// jQuery UI alert弹出提示,一定间隔之后自动关闭 
	jqtimeralert: function(text, title, fn, timerMax) { 
		var dd = $( 
		'<div class="dialog" id="dialog-message">' + 
		' <p>' + 
		' <span class="ui-icon ui-icon-circle-check" style="float: left; margin: 0 7px 0 0;"></span>' + text + 
		' </p>' + 
		'</div>'); 
		dd[0].timerMax = timerMax || 3; 
		return dd.dialog({ 
			//autoOpen: false, 
			resizable: false, 
			modal: true, 
			show: { 
			effect: 'fade', 
			duration: 300 
		}, 
		open: function(e, ui) { 
			var me = this, 
			dlg = $(this), 
			btn = dlg.parent().find(".ui-button-text").text("确定(" + me.timerMax + ")"); 
			--me.timerMax; 
			me.timer = window.setInterval(function() { 
				btn.text("确定(" + me.timerMax + ")"); 
				if (me.timerMax-- <= 0) { 
					dlg.dialog("close"); 
					fn && fn.call(dlg); 
					window.clearInterval(me.timer); // 时间到了清除计时器 
				} 
			}, 1000); 
		}, 
		title: title || "提示信息", 
		buttons: { 
			"确定": function() { 
					var dlg = $(this).dialog("close"); 
					fn && fn.call(dlg); 
					window.clearInterval(this.timer); // 清除计时器 
				} 
			}, 
			close: function() { 
					window.clearInterval(this.timer); // 清除计时器 
			} 
		}); 
	}, 
	// jQuery UI confirm弹出确认提示 
	jqconfirm: function(text, title, fn1, fn2) { 
		var html = 
		'<div class="dialog" id="dialog-confirm">' + 
		' <p>' + 
		' <span class="ui-icon ui-icon-alert" style="float: left; margin: 0 7px 20px 0;"></span>' + text + 
		' </p>' + 
		'</div>'; 
		return $(html).dialog({ 
			//autoOpen: false, 
			resizable: false, 
			modal: true, 
			show: { 
				effect: 'fade', 
				duration: 300 
			}, 
			title: title || "提示信息", 
			buttons: { 
				"确定": function() { 
					var dlg = $(this).dialog("close"); 
					fn1 && fn1.call(dlg, true); 
				}, 
				"取消": function() { 
					var dlg = $(this).dialog("close"); 
					fn2 && fn2(dlg, false); 
				} 
			} 
		}); 
	}, 
	// jQuery UI 弹出iframe窗口 
	jqopen: function(url, options) { 
		var html = 
		'<div class="dialog" id="dialog-window" title="提示信息">' + 
		' <iframe src="' + url + '" frameBorder="0" style="border: 0; " scrolling="auto" width="100%" height="100%"></iframe>' + 
		'</div>'; 
		return $(html).dialog($.extend({ 
			modal: true, 
			closeOnEscape: false, 
			draggable: false, 
			resizable: false, 
			close: function(event, ui) { 
				$(this).dialog("destroy"); // 关闭时销毁 
			} 
		}, options)); 
	}, 
	// jQuery UI confirm提示 
	confirm: function(evt, text, title) { 
		evt = $.event.fix(evt); 
		var me = evt.target; 
		if (me.confirmResult) { 
			me.confirmResult = false; 
			return true; 
		} 
		jQuery.jqconfirm(text, title, function(e) { 
			me.confirmResult = true; 
			if (e) { 
				if (me.href && $.trim(me.href).indexOf("javascript:") == 0) { 
					$.globalEval(me.href); 
					me.confirmResult = false; 
					return; 
				} 
				var t = me.type && me.type.toLowerCase(); 
				if (t && me.name && (t == "image" || t == "submit" || t == "button")) { 
					__doPostBack(me.name, ""); 
					me.confirmResult = false; 
					return; 
				} 
				if (me.click) me.click(evt); 
			} 
			return false; 
		}); 
		return false; 
	} 
});

以上代码还存在一个问题,就是每次弹出框关闭之后都没有销毁。

解决办法:

在close事件里面destroy ,把alert/confirm提供里的dialog实例设置成静态的,在外部调用使用单个dialog实例

软件功能: * 无限级弹出窗口 * Esc退出block弹出窗口 * 可拖动窗口 * 模态窗口 * 模态alert警告对话框 * 模态confirm对话框 * 页面局部模态 * 绑定按钮响应函数 * 弹出窗口加载iframe * 自定义背景样式 组件提供了六个函数: $.funkyUI // 弹出模态窗口 $.unfunkyUI // 关闭模态窗口 $.alert //警告提示对话框 $.confirm //确认和取消对话框 $.fn.block //块模态 $.fn.unblock//解除块模态 调用示例: $.blockUI({ url:"1.html",//弹出窗口显示的内容,使用iframe OKEvent:okEvent,//okEvent是自定义的确定按钮响应函数, css:{width:"700",height:"500"} }); $.alert("这是警告窗口"); $.confirm("这是个Boolean窗口"); $('#blocked').block();//id为blocked的元素设置为只读 $('#blocked').unblock();//解除 实现的思路: 我在主窗体中创建一个层,用来作为弹出窗体,包含一个iframe,通过参数指定URL,作为显示的内容,我觉得可能会有利于代码的重用,代码管理起来要方便一些 弹出窗口中含有的弹出窗口也在主窗体中创建,这样结构简单一点,比较容易管理。我在创建弹出窗口的时候在主窗体中声明一个栈,把当前iframe的window对象压入栈,这样不管我现在弹出了多少个窗口总能很容易的找到其中的任意一个的对象。 有感兴趣的把我的代码下载回去看看,然后给我提提意见,帮我提高。。。 觉得可用的随便用,有不明白的问我
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值