使用jquery dialog
网页开发中,弹窗还是很有必要的。本人比较喜欢jquery ui的dialog。
但是jquery dialog中也有一些略显不方便的,如:没有z-index的参数设置,脚部的按钮样式没办法自定义……
我自己简单地写了个使用jquery dialog封装函数,有兴趣的朋友看看。
JavaScript(看起来有点多,但放到vs里,ctrl+m+o,还是比较清楚明了的):
$.ivanjs = $.ivanjs || {};
$.ivanjs.com = $.ivanjs.com || {};
$.ivanjs.com = {
//other function
//弹窗
showWin: function (content, options) {
var contentDiv = content;
//检查传递过来的参数类型是否为Jquery对象
if (!(content instanceof $)) {
//如果是字符串,则构造一个Jquery对象
if (typeof (content) == "string") {
contentDiv = $("<div>" + content + "</div>");
} else {
alert("弹窗内容参数无效,必须为jquery元素对象或者字符串");
return null;
}
}
//默认设置
var _options = {
autoOpen: true,
modal: true,
zIndex: null,
full: false,//是否全屏
destroyEnable: true,
afterOpen: function () {
//打开之后的回调
}
};
//避免为空对象
options = options || {};
//把按钮对象转换为jquery ui能识别的格式参数
var customBtns = options.buttons || [];
options.buttons = {};
for (var i = 0; i < customBtns.length; i++) {
var btnObj = customBtns[i];
options.buttons[btnObj.text] = btnObj.handler || function () {};
}
//调用者的设置优先
_options = $.extend({}, _options, options);
//关闭后的回调
var closeCallback = _options.close;
var isCodeElement = $("body").find(contentDiv).length == 0;
_options.close = function () {
if (closeCallback) {
closeCallback();
}
//如果是用代码构造的jquery元素,则销毁。避免下次构造时页面中反复存在
if (_options.autoOpen && _options.destroyEnable && isCodeElement) {
setTimeout(function () {
contentDiv.remove();
}, 250);
}
};
//初始化之后立即打开的
if (_options.autoOpen && !contentDiv.length) {
alert("弹窗内容要显示的jquery元素不存在,selector:" + contentDiv.selector);
return null;
}
var dialogObj = contentDiv.dialog(_options);
updateDialogStyle();
if (_options.autoOpen && _options.afterOpen) {
_options.afterOpen();
}
//如果是初始化之后,再手动打开的,则添加一个打开的“开关”,供外部使用
dialogObj.open = function () {
if (!dialogObj.length) {
alert("弹窗内容要显示的jquery元素不存在,selector:" + dialogObj.selector);
}
dialogObj.dialog("open");
updateDialogStyle();
if (_options.afterOpen) {
_options.afterOpen();
}
};
return dialogObj;
//应用自定义的样式,更新弹窗样式
function updateDialogStyle() {
var uiDialog = contentDiv.parent(".ui-dialog");
//z-index
if (_options.zIndex) {
uiDialog.css({ "z-index": _options.zIndex });
}
//按钮样式
if (customBtns.length) {
for (var j = 0; j < customBtns.length; j++) {
var cbtn = customBtns[j];
var btnArr = uiDialog.find("button:contains('" + cbtn.text + "')");
var btn = btnArr;
if (btnArr.length > 1) {
for (var k = 0; k < btnArr.length; k++) {
btn = $(btnArr[k]);
var res = $(btn.children()).filter(function (index) {
return $(this).text() == cbtn.text;
});
if (res.length>0) {
break;
}
}
}
//覆盖全部class样式
if (cbtn.className) {
btn.attr("class", cbtn.className);
}
//增加
if (cbtn.addClass) {
btn.addClass(cbtn.addClass);
}
//移除
if (cbtn.removeClass) {
btn.removeClass(cbtn.removeClass);
}
//内嵌样式
if (cbtn.style) {
for (var styleName in cbtn.style) {
btn.css(styleName, cbtn.style[styleName]);
}
}
//图标
if (cbtn.icon) {
btn.prepend($("<span>" + cbtn.icon + "</span>"));
}
//ko绑定
if (cbtn["data-bind"]) {
btn.attr("data-bind", cbtn["data-bind"]);
}
}
//只需更新一次,然后重置按钮参数变量,避免打开之后反复更新按钮样式
customBtns = [];
}
//宽和高
if (_options.full) {
setFullScreen();
$(window).resize(function () {
setFullScreen();
}).resize();
//全屏样式
function setFullScreen() {
var uiAllWidth = $(window).width() - 20,
uiAllHeight = $(window).height() - 30;
uiDialog.css("width", uiAllWidth);
uiDialog.css("height", uiAllHeight);
uiDialog.css("left", "5px");
uiDialog.css("top", "5px");
var uiFooter = uiDialog.find(".ui-dialog-buttonpane"),
uiHeader = uiDialog.find(".ui-dialog-titlebar"),
uiFooterH = uiFooter.height(),
uiHeaderH = uiHeader.height();
console.log("高:全部" + uiAllHeight + ";头" + uiHeaderH + ";脚" + uiFooterH);
contentDiv.css("height", uiAllHeight - uiHeaderH - uiFooterH - 50);
}
}
else {
var uiWidth = parseInt(uiDialog.css("width")),
winWidth = $(window).width();
if (winWidth <= uiWidth) {
uiDialog.css("width", winWidth - 10);
} else if (_options.width) {
uiDialog.css("width", _options.width);
}
}
}
}
};
栗子-html:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title> </head>
<body> <div>
<input type="button" id="openFormDialog_body" value="打开子表单" />
</div> <div id="dialogform" title="Create new user">
<input type="text" value=" " />
</div> </body>
</html>
栗子-js:
//测试1:自动弹出
$.ivanjs.com.showWin("yes"); $.ivanjs.com.attachConsole(); //测试2:手动弹窗
var bodyDialog = $.ivanjs.com.showWin($("#dialogform"), {
autoOpen: false,
height: 300,
width: 550,
full: false,
zIndex:999,
modal: true,
buttons: [
{ text: "确认", className: "yourClass", style: { color: "green" },icon:"<fa>123</fa>", "data-bind":"click:myClick", handler: function () { } },
{text:"确认取消"}
],
close: function () { }
});
呃,如果要运行的话,当然要在示例的html里引入示例js……怎么引用JS,这个就不好说了吧……
另外,console.log,ie9及以下的浏览器不支持哦,以上代码里的console.log只是为了方便调试,可以注释掉的。
使用jquery dialog的更多相关文章
- jquery dialog open后,服务器端控件失效的快速解决方法
jquery dialog为我们提供了非常漂亮实用的对话框,比单调的alert.confirm.prompt好用很多. 在使用jquery与.net共同开发时,直接调用jquery dialog的op ...
- jQuery Dialog弹出层对话框插件
Dialog.js的相关注释已经添加,可以按照注释,进行相关样式的修改,适用于自定义的各个系统! dialog.js /** * jQuery的Dialog插件. * * @param object ...
- JQuery Dialog 禁用X按钮关闭对话框,-摘自网络
JQuery Dialog 禁用X按钮关闭对话框,禁用ESC键关闭代码如下:$("#div1").dialog({ closeOnEscape: false, open: ...
- MVC3+EF5.0 code first+Flexigrid+ajax请求+jquery dialog 增删改查
MVC3+EF5.0 code first+Flexigrid+ajax请求+jquery dialog 增删改查 本文的目的: 1.MVC3项目简单配置EF code first生成并初始化数据 ...
- jquery dialog的一些坑
jquery dialog工具可以方便的生成一个弹出框,但是在一些需要多个弹出框的应用场景上会有一些bug 具体场景: 当使用过一次模态框之后,使用另外的一个模态框时,已经消失不见的模态框会重新出来 ...
- jQuery dialog 简介
dialog是jQuery UI 库的一个UI组件,所以使用dialog时,不仅要引入jQuery.js(因为它只是轻量级的基础框架),还需要引入jQueryUI的js及相关css文件 示例: < ...
- jQuery.dialog
本篇文章主要是对JQUERY中dialog的用法进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助 今天用到了客户端的对话框,把 jQuery UI 中的对话框学习了一下. 准备 jQ ...
- JQUERY dialog的用法详细解析
本篇文章主要是对JQUERY中dialog的用法进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助 今天用到了客户端的对话框,把 jQuery UI 中的对话框学习了一下. 准备 jQ ...
- 解决 jquery dialog 弹框destroy销毁方法不能把弹出元素设置成初始状态
在使用jquery ui中的dialog弹出窗口的时候遇到一个问题,就是页面弹出窗口关闭后希望表单元素能回到初始状态 例如文本框输入内容后关闭dialog后里面的内容清除,使用了destroy方法也不 ...
随机推荐
- Linux(CentOS)下的vsftpd服务器配置-五岳之巅
说明:VSFTPD这款软件,网上和书里有很多配置文章,但不一定适用于您的主机,不同版本默认值不一样,我现在使用的是vsftpd-2.0.5-12.el5_3.1.千万记住:修改配置文件后,必须重新启动 ...
- 某游戏研究之字符过滤类-WorldFilter
所谓字符过滤器,常常用在聊天的内容,比如一连串的骂人难听的话,我们要屏蔽掉,避免造成不好的东西! 当然我作为中华天朝一个有文明有素质的人,肯定偶尔会做这样的事情啦,特别是打LOL的时候,算了不讲了,都 ...
- git 命令02
1.怎么添加远程库2.克隆一个远程库3.什么是分支管理4.什么是标签管理3.搭建git服务器 1.添加远程库.我以github官网上提供给用户注册https://github.com/,可以在官网了自 ...
- Windows系统下将目录挂载为一个磁盘并分配盘符
Windows系统下subst可以临时将目录分配一个盘符. 将路径与驱动器号关联. SUBST [drive1: [drive2:]path]SUBST drive1: /D drive1: 指定要分 ...
- Linux 设备驱动--- 并发 与 竞态 --- atomic_t --- atomic_dec_and_test --- 原子操作
并发: 多个执行单元同时被执行. 竞态: 并发的执行单元对资源 ( 硬件资源和软件上的全局变量等 ) 的访问导致的竞争状态. 并发的处理: 处理并发的常用技术是加锁或者互斥,即保证在任何时间只有一个执 ...
- java源码阅读Observable(观察者模式)
1类签名和简介 package java.util; public class Observable Observable是Java内置的观察者模式中的主题类(没错,是类不是接口),和其对应的观察者接 ...
- Spark Streaming的PIDRateEstimator与backpressure
PIDRateEstimator是Spark Streaming用来实现backpressure的关键组件. 看了一些博客文章,感觉对它的解释都没有说到要点,还是自己来研究一下比较好. 首先,需要搞清 ...
- [转]php中实现事件驱动
原文: https://blog.csdn.net/yhl27/article/details/8705313 -------------------------------------------- ...
- 从0x00到0xFF的含义以及二进制到10进制的转换(转)
转载自: http://www.cnblogs.com/brice/p/5343322.html 对于二进制来说,8位二进制我们称之为一个字节,二进制的表达范围值是从0b00000000-0b1111 ...
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat等使用详解
转载:http://blog.csdn.net/tzs_1041218129/article/details/61630981 javap 和 javac javap -help javac -hel ...