2011-05-17 131 views
4

我有一个网页,其中包含四个链接,每个链接打开一个弹出窗口。我使用的是常见的JavaScript函数来打开弹出式窗口,下面如何将焦点设置到子窗口而不刷新它?

function OpenPopup(pageURL, title,w,h) { 

    var left = (screen.width/2)-(w/2); 

    var top = (screen.height/2)-(h/2); 

    var targetWin = window.open (pageURL, title, 'toolbar=no, location=no, 
     directories=no, status=no, menubar=no, scrollbars=Yes, resizable=no, 
     copyhistory=no, width='+w+', height='+h+', top='+top+', left='+left); 

    targetWin.focus(); 

} 

给出当我点击一个链接它会打开一个弹出窗口,其中包含一个数据输入形式,我输入了一些信息转换成表格。然后我需要查看其他弹出窗口中的其他信息,所以我回到我的主窗口,单击另一个链接,一个新的弹出窗口将打开,其中包含我需要查看的信息。我得到信息并关闭了这个弹出窗口,所以现在我在我的主窗口上,然后再次点击该数据输入窗体的链接,所以弹出窗口出现了,但是我输入了我输入的信息,这是因为我再次打开弹出式窗口,新的弹出式窗口将用相同的名称替换现有的弹出式窗口。

现在我的问题是:

  1. 是他们的任何方式,我可以检查出是否弹出窗口已经从父窗口打开?

  2. 如果弹出窗口已经打开,我怎样才能将焦点设置到它,而不是重新加载它?

  3. 如何从父窗口引用子窗口,而不需要通过子窗口的名称存在子窗口的对象?

  4. 即使在刷新父窗口之后,是否可以从父窗口引用子窗口?

+0

我的建议是完全跳过弹出窗口。大多数浏览器会阻止它们,假设它们是广告。无论如何,它们都是糟糕的设计。在应用程序中显示/隐藏div,向下滑动这些表单的其余内容。 – HyderA 2011-05-17 14:42:21

回答

0

我想你想要的1和2:

if(!targetWin) 
{ 
    var targetWin = window.open (pageURL, title, 'toolbar=no, location=no, 
     directories=no, status=no, menubar=no, scrollbars=Yes, resizable=no, 
     copyhistory=no, width='+w+', height='+h+', top='+top+', left='+left); 
} 
targetWin.focus(); 
+0

我认为他希望能够打开多个窗口,而不是阻止访问现有的窗口。 – HyderA 2011-05-17 14:43:59

+0

没有我需要的是将焦点设置到已打开的窗口,而不刷新它,我得到了解决方案,您可以在http://ektaraval.blogspot.com/2011/05/how-to-set-focus- to-child-window.html – Ekta 2011-05-19 14:42:36

5

为1和2,您可以使用此功能

// loads an URL into the popup without reloading it 
function popupnr(mylink, windowname, refocus) { 
    // open the window with blank url 
    var mywin = window.open('', windowname, 'window attrs here'); 

    // if we just opened the window 
    if (mywin.closed || (!mywin.document.URL) || (mywin.document.URL.indexOf("about") == 0)) { 
     mywin.location = mylink; 
    } 
    else if (refocus) { 
     mywin.focus(); 
    } 

    // return the window 
    return mywin; 
} 
  1. 你不能指代一个孩子窗口的名字。没有window.children。您需要致电window.open以获得参考。

  2. 是的,你可以。但你需要使用同一窗口的名称,同时呼吁window.open

+0

感谢Aravindan,这就是我正在寻找的东西... – Ekta 2011-05-19 14:40:38

+0

请“接受”答案..点击答案旁边的勾号。 – 2011-05-24 18:14:10