zoukankan      html  css  js  c++  java
  • 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 =400;
        var iWidth =500;
        var iTop = (window.screen.availHeight - 30 - iHeight) / 2;       //获得窗口的垂直位置;
        var iLeft = (window.screen.availWidth - 10 - iWidth) / 2;        //获得窗口的水平位置;
        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;
    }
  • 相关阅读:
    epplus
    http://www.cmake.org/
    patheditor2
    emgu cv
    OpenCV
    Tesseract
    Blendar基金会
    安装服务windows,installutil
    R 软件
    历史为什么选择C语言?事实证明:暮年的C语言,依旧宝刀未老!
  • 原文地址:https://www.cnblogs.com/coolsundy/p/4273021.html
Copyright © 2011-2022 走看看