3

是否可以从其父级关闭模式窗口?即使尝试这样做也有点困难。基本上,我正在打开一个非模态窗口。从那个非模态窗口,用户有时可能会打开一个模态窗口。现在假设我关闭非模态窗口...我希望模态子窗口也关闭。如何才能做到这一点?

基本上,总的来说,我必须找到一种方法从其父级关闭模式窗口。

谢谢,格雷

这里有一些代码给你一个示例。

起始页


    <html>
   <head>
     <script>
        window.childWindow;
        function openNonModal()
        {
           window.childWindow = window.open("nonmodal.html","_blank", "dialogWidth=500px;dialogHeight=294px;scroll=no;status=no;caption=no;titlebar=no;menubar=no;toolbar=no;help=no");
           setTimeout("closeChildWindow()",5000);
        }

    function closeChildWindow()
    {
       window.childWindow.closeChildWindow();
       window.childWindow.close();
    }
 <script>

</head> <input type="button" value="openNonModal" onclick="openNonModal(); return false;"/> </html>

打开模态窗口的非模态窗口。


    <html>
   <head>
     <script>
        function openModal()
        {
           var retVal = window.showModalDialog("modal.html","_blank", "dialogWidth=500px;dialogHeight=294px;scroll=no;status=no;caption=no;titlebar=no;menubar=no;toolbar=no;help=no");
        }
        function closeChildWindow()
        {
           alert("should close child window");

    }
 </script>

</head> <input type="button" value="openModal" onclick="openModal(); return false;"/> </html>

模态窗口只是文本。


    <html>
   Just a sample.
</html>

4

1 回答 1

2

一旦你打开一个模态窗口,打开器就会冻结,你不能通过它应用任何控制!

如需更多说明,请查看此代码:

setTimeout('alert(1);', 1000);
setTimeout('alert(2);', 2000);
setTimeout('window.showModalDialog(...);', 3000);
setTimeout('alert(3);', 4000);

alert(1)将在第一秒执行。

alert(2)即使您不确认,也会在下一秒执行alert(1)

第 3 秒将打开模态窗口,此时打开器窗口冻结,因此alert(3)不会第 4 秒执行。

alert(3)当模态窗口仍然打开时不会执行,但在关闭模态窗口一秒钟后alert(3)将执行。

结论:Parent在打开后无法控制模态窗口,因为它实际上已经死了:-(

于 2010-09-03T18:22:34.547 回答