对jQuery blockUI插件进行了小的封装扩展,支持confirm、alert、dialog弹出窗口提示信息,支持按钮回调事件。可以自定义css样式、覆盖blockUI的样式等
首先要到jquery blockUI 官方网址:http://malsup.com/jquery/block/
下载jquery.blockUI JS lib:http://malsup.com/jquery/block/jquery.blockUI.js?v2.38
而且还需要jquery lib:http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js
jquery.blockUI.dialog.js
/***
* jquery blockUI Dialog plugin
* v1.1
* @createDate -- 2012-1-4
* @author hoojo
* @email [email protected]
* @requires jQuery v1.2.3 or later, jquery.blockUI-2.3.8
* Copyright (c) 2012 M. hoo
* Dual licensed under the MIT and GPL licenses:
* http://hoojo.cnblogs.com
* http://blog.csdn.net/IBM_hoojo
**/
;(function ($) {
var _dialog = $.blockUI.dialog = {};
// dialog 默认配置
var defaultOptions = {
css: {
padding: '8px',
opacity: .7,
color: '#ffffff',
border: 'none',
'border-radius': '10px',
backgroundColor: '#000000'
},
// 默认回调函数 取消或隐藏 dialog
emptyHandler: function () {
$.unblockUI();
},
// 用户回调函数
callbackHandler: function (fn) {
return function () {
fn();
defaultOptions.emptyHandler();
};
},
// confirm 提示 html元素
confirmElement: function (settings) {
settings = settings || {};
var message = settings.message || "default confirm message!";
var okText = settings.okText || "ok";
var cancelText = settings.cancelText || "cancel";
if (typeof settings.onOk !== "function") {
settings.onOk = this.emptyHandler;
}
if (typeof settings.onCancel !== "function") {
settings.onCancel = this.emptyHandler;
}
var okCallback = this.callbackHandler(settings.onOk) || this.emptyHandler;
var cancelCallback = this.callbackHandler(settings.onCancel) || this.emptyHandler;
var html = [
'<div class="dialog confirm">',
'<p>',
message,
'</p>',
'<input type="button" value="',
okText,
'" class="btn ok-btn"/>',
'<input type="button" value="',
cancelText,
'" class="btn cancel-btn"/>'
].join("");
var $el = $(html);
$el.find(":button").get(0).onclick = okCallback;
$el.find(":button:last").get(0).onclick = cancelCallback;
return $el;
},
// alert 提示html元素
alertElement: function (settings) {
settings = settings || {};
var message = settings.message || "default alert message!";
var okText = settings.okText || "ok";
if (typeof settings.onOk !== "function") {
settings.onOk = this.emptyHandler;
}
var okCallback = this.callbackHandler(settings.onOk) || this.emptyHandler;
var html = [
'<div class="dialog alert">',
'<p>',
message,
'</p>',
'<input type="button" value="',
okText,
'" class="btn ok-btn"/>'
].join("");
var $el = $(html);
$el.find(":button:first").get(0).onclick = okCallback;
return $el;
}
};
var _options = defaultOptions;
// 对外公开的dialog提示html元素,提供配置、覆盖
$.blockUI.dialog.confirmElement = function () {
return _options.confirmElement(arguments[0]);
};
$.blockUI.dialog.alertElement = function () {
return _options.alertElement(arguments[0]);
};
// 提供jquery 插件方法
$.extend({
confirm: function (opts) {
var i = (typeof opts === "object") ? 1 : 0;
var defaults = {
message: arguments[i++] || "default confirm message!",
onOk: arguments[i++] || _options.emptyHandler(),
onCancel: arguments[i++] || _options.emptyHandler(),
okText: arguments[i++] || "ok",
cancelText: arguments[i] || "cancel"
};
opts = opts || {};
opts.css = $.extend({}, _options.css, opts.css);
// 覆盖默认配置
var settings = $.extend({}, _options, defaults, opts);
settings = $.extend(settings, { message: _dialog.confirmElement(settings) });
settings = $.extend({}, $.blockUI.defaults, settings);
$.blockUI(settings);
},
alert: function (opts) {
var i = (typeof opts === "object") ? 1 : 0;
var defaults = {
message: arguments[i++] || "default alert message!",
onOk: arguments[i++] || _options.emptyHandler(),
okText: arguments[i] || "ok"
};
opts = opts || {};
opts.css = $.extend({}, _options.css, opts.css);
var settings = $.extend({}, _options, defaults, opts);
settings = $.extend(settings, { message: _dialog.alertElement(settings) });
settings = $.extend({}, $.blockUI.defaults, settings);
$.blockUI(settings);
},
// dialog提示
dialog: function (opts) {
var settings = $.extend({}, $.blockUI.defaults, _options, opts || {});
$.blockUI(settings);
},
// 移除dialog提示框
removeDialog: function () {
_options.emptyHandler();
}
});
})(jQuery);
应用样式文件block.dialog.css
dialog是全局样式,btn是所有按钮的样式、ok-btn是ok按钮样式、cancel-btn是取消按钮样式
.dialog {
font-size: 12px;
}
.dialog .btn {
border: 1px solid white;
border-radius: 5px;
min-width: 25%;
width: auto;
}
.dialog .ok-btn {
background-color: #ccc;
}
.dialog .cancel-btn {
/*background-color: #aeface;*/
margin-left: 10%;
}
examples.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>blockUI Dialog Examples</title>
<meta http-equiv="author" content="hoojo">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="blockUI/block.dialog.css" />
<script type="text/javascript" charset="UTF-8" src="mobile/jquery-1.6.4.js"></script>
<script type="text/javascript" charset="UTF-8" src="blockUI/jquery.blockUI-2.3.8.js"></script>
<script type="text/javascript" charset="UTF-8" src="blockUI/jquery.blockUI.dialog-1.1.js"></script>
<script type="text/javascript">
;(function ($) {
$(function () {
// dialog 提示框
$("#dialog").click(function () {
//$.dialog();
//$.dialog({message: $("#callback")});
$.dialog({
//theme: true, // 设置主题需要jquery UI http://www.malsup.com/jquery/block/theme.html
title: "dialog",
message: $("#callback"),
fadeIn: 1000,
fadeOut: 1200
});
setTimeout($.removeDialog, 2000);
});
// 带确定、取消按钮提示框,支持事件回调,及message等属性配置
$("#confirm").click(function () {
$.confirm({
message: "你确定要删除吗?",
okText: "确定",
cancelText: "取消",
onOk: function () {
alert("你点击了确定按钮");
},
onCancel: function () {
alert("你点击了取消按钮");
}
});
});
// 警告提示框 对象模式配置css、message、按钮文本提示
$("#alert").click(function () {
$.alert({
message: "你确定要删除吗?",
okText: "确定",
css: {
"background-color": "white",
"color": "red"
},
onOk: function () {
alert("你点击了确定按钮");
}
});
});
// 非对象配置属性,多个参数配置
/**
$.confirm 方法参数config配置介绍:
当第一个参数是一个对象:
对象中可以出现以下属性配置,并且可以出现$.blockUI的配置
{
message: arguments[i++] || "default confirm message!",
onOk: arguments[i++] || _options.emptyHandler(),
onCancel: arguments[i++] || _options.emptyHandler(),
okText: arguments[i++] || "ok",
cancelText: arguments[i] || "cancel"
}
message 是提示框的提示信息
onOk是确定按钮的click回调函数
onCancel 是取消按钮的click事件回调方法
okText是ok按钮的文字 默认是ok
cancelText是cancel按钮的文本内容
如果第一个参数不是一个对象,那么
参数1表示 message 及提示文字
参数2表示ok按钮的click事件回调函数
参数3表示cancel按钮的click事件回调函数
参数4表示ok按钮的文本
参数5表示cancel按钮的文本内容
注意:如果第一参数是一个对象,后面又出现了相应的参数配置;这种情况下对象配置优先于
后面的参数配置,而且参数的位置也会改变:
参数1是对象配置
参数2表示 message 及提示文字
参数3表示ok按钮的click事件回调函数
参数4表示cancel按钮的click事件回调函数
参数5表示ok按钮的文本
参数6表示cancel按钮的文本内容
*/
$("#confirm2").click(function () {
$.confirm({ message: "is a message", timeout: 3000 }, "message", function () {
alert("success");
}, function () {
alert("failure");
}, "按钮");
});
/**
第一个参数是对象配置,当对象配置中出现的选项会覆盖后面的参数配置
$.alert 方法 config 介绍:
当第一个参数 是一个对象:
{
message: arguments[i++] || "default alert message!",
onOk: arguments[i++] || _options.emptyHandler(),
okText: arguments[i] || "ok"
}
message 是提示框的提示信息
onOk是确定按钮回调函数
okText是ok按钮的文字 默认是ok
当第一个参数不是一个对象的情况下,那么
参数1表示 message 及提示文字
参数2表示ok按钮的click事件
参数3表示ok按钮的文本
注意:如果第一个参数是一个对象,对象中出现的配置:message、onOk、okText,这些配置将会
覆盖后面的配置,也就是说这些配置在第一个参数中出现后,后面的参数就不需要
*/
$("#alert2").click(function () {
$.alert({
css: {
"background-color": "red"
},
timeout: 1200,
onOk: function () {
alert("确定");
}
},
"你有一条消息",
function () {
alert("被覆盖");
}, "yes?");
});
var _confirm = function (msg) {
$.confirm({
message: msg,
onOk: function () {
alert("你点击了确定按钮");
},
onCancel: function () {
alert("你点击了取消按钮");
}
});
};
$("#confirm3").click(function () {
_confirm("message");
});
var _alert = function (msg) {
$.alert({
message: msg,
css: {
"background-color": "white",
"color": "red"
},
onOk: function () {
alert("你点击了确定按钮");
}
});
}
$("#alert3").click(function () {
_alert();
});
});
})(jQuery);
</script>
</head>
<body>
<ul>
<h2>jQuery blockUI Dialog Demos</h2>
<li>dialog demo <input type="button" value="dialog" id="dialog"/></li>
<li>confirm callback demos<input type="button" value="confirm" id="confirm"/></li>
<li>confirm callback demos 2<input type="button" value="confirm" id="confirm2"/></li>
<li>confirm callback demos 3<input type="button" value="confirm" id="confirm3"/></li>
<li>alert callback demos<input type="button" value="alert" id="alert"/></li>
<li>alert callback demos 2<input type="button" value="alert" id="alert2"/></li>
<li>alert callback demos 3<input type="button" value="alert" id="alert3"/></li>
</ul>
<div style="display: none;">
<div id="callback">
<p>ok or cancel? asdfaf jQuery blockUI Dialog Demos jQuery blockUI Dialog Demos jQuery blockUI Dialog Demos jQuery blockUI Dialog Demos</p>
<input type="button" value="OK" class="btn ok-btn"/>
<input type="button" value="Cancel" class="btn cancel-btn"/>
</div>
</div>
</body>
</html>
截图效果
confirm
alert