JS 弹出模态窗口解决方案
最近在项目中使用弹出模态窗口,功能要求:
(1)模态窗口选择项目
(2)支持选择返回事件处理
在IE中有showModalDialog 方法,可以很好的解决该问题,但是在Chrome中和FF中就有问题了,它们不支持showModalDialog方法。因此需要采用不同的处理方法。
IE中的窗口打开函数option参数定义之间必须用分号分隔,Chrome是用逗号分隔,使用时需要注意这点。
var option = "";
//居中显示,
option = "dialogWidth=" + iWidth + "px;dialogHeight=" + iHeight + 'px;dialogTop=' + iTop + 'px;dialogLeft=' + iLeft + "px;center=yes;help=no;status=no;scroll=yes;resizable=yes";
if (window.ActiveXObject) { //IE
option = "dialogWidth=" + iWidth + "px;dialogHeight=" + iHeight + 'px;dialogTop=' + iTop + 'px;dialogLeft=' + iLeft + "px;center=yes;help=no;status=no;scroll=yes;resizable=yes";
}
else { //非IE
option = 'height=' + iHeight + ',innerHeight=' + iHeight + ',width=' + iWidth + ',innerWidth=' + iWidth + ',top=' + iTop + ',left=' + iLeft+",help=no,status=no,scroll=yes,resizable=yes";
}
第一:统一的核心方法
对于Chrome只能采用open方法弹出窗口,但是该方法不是模态的,因此代码不能实现等待窗口关闭后才返回值,只能在窗口关闭后调用一个回调函数来执行主页面的方法。
//定义回调函数变量
var CallBackFunc=undefined;
//传入回调函数名称
function SetCallBack(funcName)
{
CallBackFunc=funcName;
} //触发回调函数
function ShowOpenDialog()
{
//Do something ....
//调用主界面回调函数方法
if (CallBackFuncName != undefined) {
CallBackFuncName();
}
}
第二:在主界面调用时
$(document).ready(function(){
//设置回调函数
SetCallBack(MainDo);
//执行弹出窗口方法
ShowOpenDialog('http://....');
});
function MainDo()
{
alert('Do Result');
}
第三:弹出窗口返回值的处理
if(window.ActiveXObject){ //IE
window.returnValue =返回值;
window.close();
}else{ //非IE
if(window.opener) {
window.opener.统一返回方法(返回值);
}
window.close();
}
完整统一的核心代码:
//定义回调函数变量
var CallBackFunc=undefined;
//传入回调函数名称
function SetCallBack(funcName)
{
CallBackFunc=funcName;
}
//执行
function ShowOpenDialog(strUrl)
{
var iHeight =;
var iWidth =;
var iTop = (window.screen.availHeight - - iHeight) / ; //获得窗口的垂直位置;
var iLeft = (window.screen.availWidth - - iWidth) / ; //获得窗口的水平位置;
var option = "";
//居中显示,
option = "dialogWidth=" + iWidth + "px;dialogHeight=" + iHeight + 'px;dialogTop=' + iTop + 'px;dialogLeft=' + iLeft + "px;center=yes;help=no;status=no;scroll=yes;resizable=yes";
if (window.ActiveXObject) { //IE
option = "dialogWidth=" + iWidth + "px;dialogHeight=" + iHeight + 'px;dialogTop=' + iTop + 'px;dialogLeft=' + iLeft + "px;center=yes;help=no;status=no;scroll=yes;resizable=yes";
}
else { //非IE
option = 'height=' + iHeight + ',innerHeight=' + iHeight + ',width=' + iWidth + ',innerWidth=' + iWidth + ',top=' + iTop + ',left=' + iLeft+",help=no,status=no,scroll=yes,resizable=yes";
} var args = window.showModalDialog(strUrl, window, option);
if (window.ActiveXObject) { //IE
var args = window.showModalDialog(strUrl, window, option);
return SetSelectResult(args);
} else { //非IE
window.open(strUrl, window, option);
}
} //核心返回方法
function SetSelectResult(resultValues) {
//对resultValues 进行自定义处理
//*******
//调用主界面回调函数方法
if (CallBackFuncName != undefined) {
CallBackFuncName();
}
CallBackFuncName = undefined;
return true;
}
JS 弹出模态窗口解决方案的更多相关文章
- JS弹出模态窗口下拉列表特效
效果体验:http://hovertree.com/texiao/js/20/ 或者扫描二维码在手机体验: 点击选择城市后,在弹出的层中的输入框,输入英文字母 h,会有HoverTree和Hewenq ...
- 2019-6-23-WPF-解决弹出模态窗口关闭后,主窗口不在最前
title author date CreateTime categories WPF 解决弹出模态窗口关闭后,主窗口不在最前 lindexi 2019-06-23 11:48:38 +0800 20 ...
- WPF 解决弹出模态窗口关闭后,主窗口不在最前
本文告诉大家如何解决这个问题,在 WPF 的软件,弹出一个模态窗口.使用另一个窗口在模态窗口前面.从任务栏打开模态窗口.关闭模态窗口.这时发现,主窗口会在刚才使用的另一个窗口下面 这是 Windows ...
- js 弹出div窗口 可移动 可关闭 (转)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- JS弹出子窗口
目的 在一个主窗口中,点击一个链接, 弹出一个子窗口 , 父窗口保留 在子窗口中点击关闭, 关闭子窗口. 子窗口的位置位于屏幕的中间 实现 main.html <!DOCTYPE html> ...
- js 弹出div窗口 可移动 可关闭
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- JS 弹出小窗口
弹出窗口函数 function openwindow(url,name,iWidth,iHeight){ var url; //转向网页的地址; var name; //网页名称,可为空; var i ...
- js弹出对话框的方法总结
九种js弹出对话框的方法总结,需要的朋友可以参考一下 [1.最基本的js弹出对话框窗口代码] 这是最基本的js弹出对话框,其实代码就几句非常简单: <script LANGUAGE=" ...
- js 弹出对话框的方法总结
原文:http://www.cnblogs.com/xiaofengfeng/archive/2012/10/20/2732784.html <!DOCTYPE html PUBLIC &quo ...
随机推荐
- POJ2065 SETI(高斯消元 同模方程)
(a1 * 1^0 + a2 * 1^1 + ... an * 1^n - 1) % P = f1 .... (a1 * n^0 + a2 * n^1 + ... an - 1 * ...
- css 内联元素
内联元素又名行内元素(inline element),和其对应的是块元素(block element),都是html规范中的概念.内联元素的显示,为了帮助理解,可以形象的称为“文本模式”,即一个挨着一 ...
- visio如何让动态连接线的单箭头变成双箭头?
1 选中线,右击,然后选择“格式”,“线条” 2 3
- 数字信号处理实验(零)—— 一维声音信号处理和二维图像处理
一.在matlab下声音信号的I/O 1.读wav文件函数 •y = wavread('filename') •[y,Fs,bits] = wavread('filename') •[...] = w ...
- ASP.NET MVC5 网站开发实践(一) - 项目框架(转)
前几天算是开题了,关于怎么做自己想了很多,但毕竟没做过项目既不知道这些想法有无必要,也不知道能不能实现,不过邓爷爷说过“摸着石头过河”吧.这段时间看了一些博主的文章收获很大,特别是@kencery,依 ...
- js-高级技术
高级技术: 1.function Person(name,age,job){ this.name=name; this.age=age; this.job=job; } var person=new ...
- JS实现类似网页的测试考卷
js实现table中获取不同td的值,并且md5加密,匹配md5的值(避免通过查看网页源代码可以看到正确答案),再用js前端判断输入与正确的值是否相同.最后再把错误的单词计数,并且输出,后端加入对应错 ...
- 1.ARC和非ARC文件共存
1.ARC和非ARC文件共存 项目->Build Parses->对应的类 1.1.新项目兼容老的非ARC:-fno-objc-arc 1.2.老项目兼容ARC:-fobjc-arc
- [转载]Robotium API 翻译(三)——判断测试结果的方法assert、is、search
该文来源于:http://blog.csdn.net/dongmu1986 下面的这些方法都主要用来判断测试结果是否与预期结果相符,一般把is和search方法放在assert里面判断.asser ...
- 2014-2015 ACM-ICPC, NEERC, Moscow Subregional Contest E. Equal Digits
E. Equal Digits time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...