2011-04-14 207 views
20

我想打開一個彈出窗口並禁用父窗口。以下是我正在使用的代碼;Javascript打開彈出窗口並禁用父窗口

function popup() 
{ 

    popupWindow = window.open('child_page.html','name','width=200,height=200'); 
    popupWindow.focus(); 
} 

出於某種原因,父窗口不會被禁用。我需要一些額外的代碼或情況如何?

同樣,我正在尋找類似於我們在使用showModalDialog()時得到的東西。它不允許選擇父窗口在all..Only的事情是我想用做同樣的事情window.open

也請提出,這將是跨瀏覽器兼容的代碼..

+0

你是什麼意思的「禁用父窗口」? – atlavis 2011-04-14 08:53:47

+0

你是什麼意思desabled? – 2011-04-14 08:54:10

+0

禁用意味着不允許用戶在父窗口中選擇說出的文本..實際上不允許他選擇父項上的任何內容。 – testndtv 2011-04-14 10:15:35

回答

28
var popupWindow=null; 

function popup() 
{ 
    popupWindow = window.open('child_page.html','name','width=200,height=200'); 
} 

function parent_disable() { 
if(popupWindow && !popupWindow.closed) 
popupWindow.focus(); 
} 

,然後在

<body onFocus="parent_disable();" onclick="parent_disable();"> 

正如你在這裏要求的父窗口的body標籤聲明這些功能是父窗口的新

<html> 
<head> 
<script type="text/javascript"> 

var popupWindow=null; 

function child_open() 
{ 

popupWindow =window.open('new.jsp',"_blank","directories=no, status=no, menubar=no, scrollbars=yes, resizable=no,width=600, height=280,top=200,left=200"); 

} 
function parent_disable() { 
if(popupWindow && !popupWindow.closed) 
popupWindow.focus(); 
} 
</script> 
</head> 
<body onFocus="parent_disable();" onclick="parent_disable();"> 
    <a href="javascript:child_open()">Click me</a> 
</body>  
</html> 

內容的完整的HTML代碼.jsp

<html> 
<body> 
I am child 
</body> 
</html> 
+0

我在IE中試過這個..但是它允許我選擇或者玩父窗口。 – testndtv 2011-04-14 10:13:10

+0

你是什麼意思,你可以選擇父窗口,因爲對我來說它工作正常。它不會允許你在父窗口上執行任何操作 – anu 2011-04-14 10:24:10

+0

對於我來說,我可以在孩子打開時對父母執行操作。 。你可以複製/粘貼你所擁有的complte HTML代碼。 – testndtv 2011-04-14 10:56:51

2

要我的知識,你不能禁用瀏覽器窗口。

你可以做的是創建一個jQuery(或類似類型)彈出窗口,當這個彈出窗口出現時,你的父瀏覽器將被禁用。

在彈出窗口中打開您的子頁面。

+0

我知道jQuery模態對話框..但我不能使用它。 .it實際上是同一個頁面內的div .. – testndtv 2011-04-14 10:13:51

+0

@hmthur - 如果你不想讓它在同一個頁面中,那麼你可以在該div中使用iframe,並給出你想要在src屬性中看到的頁面'iframe' – niksvp 2011-04-14 11:22:30

1

關鍵詞是模態對話框。

因此,沒有內置的模態對話框提供。

但是你可以使用許多其他的this

1

這就是我最終做到的!你可以在你的身體上放置一層(全尺寸)高Z指數,當然也是隱藏的。當窗口打開時,您將使其可見,使其側重於單擊父窗口(圖層),並且當打開的窗口關閉或提交時,最終將消失。

 .layer 
    { 
     position: fixed; 
     opacity: 0.7; 
     left: 0px; 
     top: 0px; 
     width: 100%; 
     height: 100%; 
     z-index: 999999; 
     background-color: #BEBEBE; 
     display: none; 
     cursor: not-allowed; 
    } 

,並在主體層:

   <div class="layout" id="layout"></div> 

功能打開的彈出窗口:

var new_window; 
    function winOpen(){ 
     $(".layer").show(); 
     new_window=window.open(srcurl,'','height=750,width=700,left=300,top=200'); 
    } 

保持新窗口聚焦:

  $(document).ready(function(){ 
      $(".layout").click(function(e) { 
       new_window.focus(); 
      } 
     }); 

,並在打開窗口:

function submit(){ 
     var doc = window.opener.document, 
     doc.getElementById("layer").style.display="none"; 
     window.close(); 
    } 

    window.onbeforeunload = function(){ 
     var doc = window.opener.document; 
     doc.getElementById("layout").style.display="none"; 
    } 

我希望這將有助於:-)

0

喜的是@anu張貼的答案是正確的,但根據需要將其完全不會工作。通過稍微改變child_open()函數它工作正常。

<html> 
<head> 
<script type="text/javascript"> 

var popupWindow=null; 

function child_open() 
{ 
if(popupWindow && !popupWindow.closed) 
    popupWindow.focus(); 
else 
    popupWindow =window.open('new.jsp',"_blank","directories=no, status=no, menubar=no, scrollbars=yes, resizable=no,width=600, height=280,top=200,left=200"); 

} 
function parent_disable() { 
    if(popupWindow && !popupWindow.closed) 
    popupWindow.focus(); 
} 
</script> 
</head> 
    <body onFocus="parent_disable();" onclick="parent_disable();"> 
    <a href="javascript:child_open()">Click me</a> 
    </body>  
</html>