zDialog插件网址:http://www.jq22.com/jquery-info2426

再次封装zDialog的代码:

(function ($) {
$.extend({
iDialog: function (param) {
var diag = new Dialog();
if (!param.height && !param.width) {
diag.Width = $(top.window).width();
diag.Height = $(top.window).height();
}
else {
diag.Width = param.width;
diag.Height = param.height;
}
diag.Title = param.title;
diag.Drag = false;
diag.ShowButtonRow = false; //ShowButtonRow:是否不显示按钮栏,值为布尔型(true|false),默认值为false,当定义了OKEvent或调用了addButton时自动设为true。
diag.URL = param.url;
diag.OkEvent = param.OkEvent; //这里是OkEvent而不是OKEvent,是为了隐藏弹出框自带按钮栏
diag.show();
}
});
})(jQuery);

弹出最大化窗口(因插件本身的原因,最大化窗口比实际window大小略小一点):

//弹出最大化窗口
$.iDialog({
title: "修改",
url: "/Auth/UserManage/Edit?id=" + row.Id,
OkEvent: function () {
reloadgrid(); //调用方法刷当前页面,即弹出框的父页面
}
});

弹出一般窗口:

$.iDialog({
title: "添加",
url: "/Auth/UserManage/Add",
width: 500,
height: 300,
OkEvent: function () {
save();
}
});

当窗口中的页面保存成功,需要刷新父窗口,这样调用:

parentDialog.OkEvent();
parentDialog.close();

当窗口中的页面保存成功时,传值给父页面,这样调用:

父页面:

$.iDialog({
title: "添加",
url: "/Auth/UserManage/Add",
width: 500,
height: 300,
OkEvent: function (userName) {
$("#UserName").val(userName)
}
});

子页面:

//保存
function save() {
parentDialog.OkEvent($("#UserName").val());
parentDialog.close();
}

子窗体如何关闭当前窗体,再关闭父窗体,并刷新父窗体的父页面 :

子窗体中数据保存完成后,这样调用:

parentDialog.OkEvent(parentDialog);

子窗体的父窗体中这样调用:

$.iDialog({
title: "添加",
url: "/Auth/UserManage/Add",
width: 800,
height: 400,
OkEvent: function (childDialog) {
parentDialog.OkEvent(); //刷新父窗体的父页面
childDialog.close(); //先关子窗体
parentDialog.close(); //再关父窗体
}
});

封装后,该插件的特点:多层弹出,且弹出到框架的最顶层;使用方便,代码简捷;可以方便地刷新父页面,可以方便地向父页面传值。

示意图:

为什么要封装这个插件?我之前用的插件是lhgDialog,是这样封装的:

/**
* lhgdialog 弹出框封装
* @param 参数
*/
(function ($) {
$.extend({
iDialog: function (param) {
if (typeof (param) == "object") {
var api;
if (frameElement && frameElement.api) {
api = frameElement.api;
$.dialog.setting.zIndex++;
}
else {
$.dialog.setting.zIndex = 1977;
}
var max = false;
if (!param.width && !param.height) {
param.width = $(top.window).width() - 18;
param.height = $(top.window).height() - 45;
param.drag = false;
max = true;
}
var defaultParam = $.extend({
max: false,
min: false,
drag: true,
lock: true,
top: "50%",
width: '800px',
resize: false,
parent: api
}, param);
if (max) {
$.dialog(defaultParam).max();
} else {
$.dialog(defaultParam);
}
} else if (typeof (param) == "string" && param == "close") {
if (frameElement.api.opener.reloadgrid) {
frameElement.api.opener.reloadgrid();
}
else if (frameElement.api.opener.refresh) {
frameElement.api.opener.refresh();
} else {
frameElement.api.opener.location = frameElement.api.opener.location;
}
frameElement.api.close();
}
else {
alert("iDialog参数错误");
}
}
});
})(jQuery);

这样使用:

$.iDialog({
title: '报告流转过程',
height: "500px",
width: "800px",
content: "url:/ViewReport/ViewReport/ReportFlow?ReportCode=" + row.REPORTCODE
});

存在的问题:1、弹出两层窗口,当关闭子窗口时,遮罩层没了,而父窗口还在,这显然是BUG,为什么官网上的Demo是正常的呢?因为它对插件加载有要求,我是在Layout里加载的,所以,所有页面都将这个插件加载一遍,这就是导致BUG的原因。2、如果父页面是Index,弹出Edit窗体,再在Edit窗体里弹出Add窗体,那么在Add窗体里调用方法alert(frameElement.api.opener.location.href);那么提示的url是Index的url而不是Edit的url,这样子窗体能找到父窗体的父页面,而找不到父窗体。

花了一两天时间,终于解决遮罩层问题,代码如下:

/*!
* 框架页面卸载前关闭所有穿越的对话框
* 同时移除拖动层和遮罩层
*/
_top != window && $(window).bind('unload',function()
{
var bl = true; //此处修改
var list = lhgdialog.list;
for( var i in list )
{
if (list[i]) {
//此处修改
if (!lhgdialog.list[i]._lock && !lhgdialog.list[i].parent) {
bl = false;
}
list[i].close();
}
}
_singleton && _singleton.DOM.wrap.remove(); _$doc.unbind('keydown',onKeyDown); if (bl) { //此处修改
$('#ldg_lockmask', _doc)[0] && $('#ldg_lockmask', _doc).remove();
$('#ldg_dragmask', _doc)[0] && $('#ldg_dragmask', _doc).remove();
}
});

父子页面的问题也已解决,代码在上面。

JS弹出框插件zDialog再次封装的更多相关文章

  1. 弹出框插件——dialog

    基于jquery和dot.js弹出框插件,兼容IE6+等其他浏览器. 思想:弹出框元素插入body节点中,并在页面垂直居中显示(fixed定位),触发确定和关闭事件绑定. 注意ie6包含两个问题:一. ...

  2. 弹出框插件layer使用

    layer是一款近年来备受青睐的web弹层组件,她具备全方位的解决方案,致力于服务各水平段的开发人员,您的页面会轻松地拥有丰富友好的操作体验. 插件官方地址:http://layer.layui.co ...

  3. bootstrap中popover.js(弹出框)使用总结+案例

    bootstrap中popover.js(弹出框)使用总结+案例 *转载请注明出处: 作者:willingtolove: http://www.cnblogs.com/willingtolove/p/ ...

  4. 【转】js弹出框、对话框、提示框、弹窗总结

    js弹出框.对话框.提示框.弹窗总结 一.js的三种最常见的对话框 //====================== JS最常用三种弹出对话框 ======================== //弹 ...

  5. js js弹出框、对话框、提示框、弹窗总结

    js弹出框.对话框.提示框.弹窗总结 一.JS的三种最常见的对话框 //====================== JS最常用三种弹出对话框 ======================== //弹 ...

  6. js登录弹出框插件

    第一步:页面引入css:<link rel="stylesheet" type="text/css"" href="common/cs ...

  7. jQuery+css3弹出框插件

    先来看DEMO:https://codepen.io/jonechen/pen/regjGG 插件的开发很简单,运用了CSS3的动画效果,并且弹出框的内容可以自定义.插件的默认配置参数有三个: var ...

  8. 弹出框layer的使用封装

    layer弹出框官方网址:http://layer.layui.com/ layer常用方法的封装:layerTool.jsp layer.config({ extend: 'extend/layer ...

  9. 5月12日上课笔记-js 弹出框、函数、程序调试、基本事件、浏览器对象模型

    一.弹出框 a.提示框 alert(); b.输入框 prompt(); c.确认框 confirm(); var flag= confirm("确认删除吗?"); 二.js程序调 ...

随机推荐

  1. Spring AOP简述

    使用面想对象(Object-Oriented Programming,OOP)包含一些弊端,当需要为多个不具有继承关系的对象引入公共行为时,例如日志,安全检测等.我们只有在每个对象中引入公共行为,这样 ...

  2. 由一篇文章引发的思考——多线程处理大数组

    今天领导给我们发了一篇文章文章,让我们学习一下. 文章链接:TAM - Threaded Array Manipulator 这是codeproject上的一篇文章,花了一番时间阅读了一下.文章主要是 ...

  3. 运用DebugDiag诊断ASP.Net异常

    Debug Diagnostic Tool (DebugDiag)是用来帮助诊断IIS/COM+等应用假死.性能差.内存泄露及碎片和崩溃等问题的工具. 本文介绍如何运用DebugDiag诊断特定的AS ...

  4. Javascript事件模型系列(二)事件的捕获-冒泡机制及事件委托机制

    一.事件的捕获与冒泡 由W3C规定的DOM2标准中,一次事件的完整过程包括三步:捕获→执行目标元素的监听函数→冒泡,在捕获和冒泡阶段,会依次检查途径的每个节点,如果该节点注册了相应的监听函数,则执行监 ...

  5. c++实现冒泡排序

    # include<iostream> #include<stdio.h> using namespace std; void maopao(int *list){ int i ...

  6. MYSQL-用户操作

    说明:本文主要写了,MYSQL对于用户的一些操作,有:查看用户,创建用户,权限的赋予,收回,用户的密码修改和删除. MySql的用户管理是通过 User表来实现的,添加新用户常用的方法有两个,一是在U ...

  7. EF架构~为导航属性赋值时ToList()的替换方案

    回到目录 今天在进行EF开发时,遇到一个问题,在进行join查询时,类中的一个集合类型的导航属性,在给它赋值时,将查询出来的结果ToList()后,出错了,linq to entity不支持这种操作, ...

  8. lua的私有性(privacy)

    很多人认为私有性是面向对象语言的应有的一部分.每个对象的状态应该是这个对象自己的事情.在一些面向对象的语言中,比如C++和Java你可以控制对象成员变量或者成员方法是否私有.其他一些语言比如Small ...

  9. lua跨平台文件夹遍历匹配查找

    require"lfs" --[[Desc:在B路径D文件中下 搜寻A路径下的没用到的C类文件: 并且将没用到的B类文件名称打印出来: 设置好路径拖到lua自带编辑器中即可运行之; ...

  10. Netty权威指南

    Netty权威指南(异步非阻塞通信领域的经典之作,国内首本深入剖析Netty的著作,全面系统讲解原理.实战和源码,带你完美进阶Netty工程师.) 李林锋 著   ISBN 978-7-121-233 ...