2010-04-08 46 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