showModalDialog is not defined 的解決方案



首先得知道window.showModalDialog()方法到底是干嘛的,有什么作用.


基本介紹:
          showModalDialog()         (IE 4+ 支持)
          showModelessDialog()      (IE 5+ 支持)
          window.showModalDialog()                  方法用來創建一個顯示HTML內容的模態對話框。
          window.showModelessDialog()             方法用來創建一個顯示HTML內容的非模態對話框。
使用方法:
          vReturnValue = window.showModalDialog(sURL [, vArguments] [,sFeatures])
          vReturnValue = window.showModelessDialog(sURL [, vArguments] [,sFeatures])
參數說明:
         sURL          --  必選參數,類型:字符串。用來指定對話框要顯示的文檔的URL。
         vArguments    -- 可選參數,類型:變體。用來向對話框傳遞參數。傳遞的參數類型不限,包括數組等。對話框通過 

                          window.dialogArguments來取得傳遞進來的參數。
         sFeatures     -- 可選參數,類型:字符串。用來描述對話框的外觀等信息,可以使用以下的一個或幾個,用分號“;”隔開。
----------------
1.    dialogHeight:    對話框高度,不小於100px
2.    dialogWidth:    對話框寬度。
3.    dialogLeft:     離屏幕左的距離。
4.    dialogTop:     離屏幕上的距離。
5.    center:          { yes | no | 1 | 0 } :              是否居中,默認yes,但仍可以指定高度和寬度。
6.    help:             {yes | no | 1 | 0 }:                是否顯示幫助按鈕,默認yes。
7.    resizable:       {yes | no | 1 | 0 } [IE5+]:     是否可被改變大小。默認no。
8.    status:          {yes | no | 1 | 0 } [IE5+]:      是否顯示狀態欄。默認為yes[ Modeless]或no[Modal]。
9.    scroll:            { yes | no | 1 | 0 | on | off }:是否顯示滾動條。默認為yes。

以上內容來自於http://www.cnblogs.com/Dlonghow/archive/2009/06/04/1496141.html


然后發現在谷歌,火狐瀏覽器根本都彈不出來模態對話框,按F12打開調試器發現window.showModalDialog()在這兩個瀏覽器中是根本沒有定義的.

解決方法:


$(function(){
    if(window.showModalDialog == undefined){
        //alert("初始化的時候,判斷window.showModalDialog是否存在")
        window.showModalDialog = function(url,mixedVar,features){
            window.hasOpenWindow = true;
            if(mixedVar) var mixedVar = mixedVar;
            if(features) var features = features.replace(/(dialog)|(px)/ig,"").replace(/;/g,',').replace(/\:/g,"=");
            window.myNewWindow = window.open(url,"_blank",features);
        }
    }
});


一加載頁面的時候,我們就判斷這個方法是否是undefined未定義的,如果是,我們給window.showModalDialog()重新賦予新的函數.
原來的寫法不變

var returnValue =window.showModalDialog(url,window,"dialogHeight:800px;dialogWidth:800px;center:yes");
子窗口的寫法


//選擇優惠券
function chooseCoupon(id) {
    var couponName =$('#'+id).val();
    var val={id: id,name:couponName};
    if (window.opener != undefined) {
        //for chrome
        window.opener.returnValue = val;
    }
    else {
        window.returnValue = val;
    }
    //調用父窗口方法
    opener.fuzhi(val);
    window.close();

}

然后遇到打開子窗口的時候就給returnValue賦值,不統一.所以這邊換了opener.fuzhi()寫法,調用了父類fuzhi的函數,讓我們得到的返回值做剩下的業務操作.
————————————————
版權聲明:本文為CSDN博主「Java_wucao」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/Java_wucao/article/details/78401525


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM