如何在不刷新的情况下将焦点设置到子窗口?

时间:2011-05-17 14:12:06

标签: javascript

我有一个包含四个链接的网页,每个链接打开一个弹出窗口。我使用常见的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. 即使在刷新父窗口后,我是否可以从父窗口引用子窗口?

2 个答案:

答案 0 :(得分: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.open以获取参考资料。

  2. 是的,你可以。但是,在调用window.open

  3. 时,您需要使用相同的窗口名称

答案 1 :(得分: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();