2010-04-08 47 views
0

我正在使用模態對話框打開模態對話框。 下面是代碼模態對話框的返回類型未定義

var Window; 

function PopDis() 
{ 
    Window=window.showModalDialog('/collector/modalBox.jsp', '', 'dialogHeight:300px; dialogWidth:500px;scroll:no; status:no; help:no; center:yes; resizable:no'); 

} 

在其他功能我想關閉的模態對話框。 代碼是

function CloseModalDialog() 
{ 
    alert("in fun close"+Window); 
    Window.close(); 
} 

但VAR窗口未定義 因此無法關閉窗口。 請給我解決方案。

+0

showModalDialog是一個僅限IE的功能。一旦模態對話框打開,您將無法點擊父窗口。你能否澄清一下,如果你正在從父窗口關閉modalDialog或從modalDialog中打開的頁面? – Sunny 2010-04-08 10:48:28

+0

@Sunny:我認爲你是對的 – Sarfraz 2010-04-08 10:55:47

+0

大多數其他瀏覽器現在支持'showModalDialog'。但它仍然是一個非常可怕的特點。避免。 – bobince 2010-04-08 11:26:02

回答

0

這意味着變量Window超出了範圍。

不知道代碼的其餘部分,一個快速的方法來解決它將使用窗口變量。就像這樣:

function PopDis() 
{ 
    window.win = window.showModalDialog('/collector/modalBox.jsp', 'win', 'dialogHeight:300px; dialogWidth:500px;scroll:no; status:no; help:no; center:yes; resizable:no'); 
} 

在有訪問窗口(瀏覽器窗口,而不是你的模態窗口)另一個地方:

function CloseModalDialog() 
{ 
    alert("in fun close"+win); 
    window.win.close(); 
    window.win = undefined; 
} 

這不是漂亮,大多數人不推薦使用此,雖然。

編輯:瀏覽器javascript的窗口變量通常是全局的。所以這應該工作。

1

showModalDialog是一個阻塞調用。直到對話框本身關閉,父頁面上才能進行其他操作。

所以,即使你調用ShowModalDialog的(之後的下一行一個javascript),它不會被執行,直到對話框實際上被關閉......

您可以從頁面關閉對話框,顯示在對話框中(假設您有控制權來更改顯示頁面中的代碼)。但是,直到模式對話框關閉後,父頁面上纔會執行任何操作。

HTH

0

爲了闡明在陽光的答案(+1),該Window變量甚至不會被分配到showModalDialog已經完成,這不會發生,直到對話窗口已經關閉。

在任何情況下,showModalDialog不會返回窗口對象 - 顯然,由於上述原因,這樣做毫無意義。它返回對話框中代碼給出的「returnValue」。該對話框只能通過對話框中的代碼關閉,該對話框不需要Window變量,因爲它只能使用它自己的window全局。

如果您需要與文檔外部的對話框進行交互,您需要的不是模態對話框。

如果你想要一個不完全吸引的用戶體驗,你想要的不是一個modalDialog。

+0

javascript會話可能嗎? 如果是的話該怎麼辦? – Aru 2010-04-09 11:05:22

+0

「JavaScript會話」是什麼意思?會話通常是服務器端功能。 – bobince 2010-04-09 11:37:16