为什么我需要在调用window.open()后编写alert()?

时间:2012-08-11 10:57:21

标签: javascript

我在此链接https://www.dropbox.com/s/0smy7nlcmilkqt4/index.jsp上有一个页面index.jsp

此文件包含名为validateloginForm()的JavaScript方法,用于验证输入字段。

如果字段已填满,那么它将重定向到另一个JSP页面,但当我删除alert("after");行下面的window.open()行时,它不会重定向到另一个页面。

请在致电alert("after")后告知我为什么需要window.open()。{/ p>

function validateloginForm()
{
    var empId = document.getElementById("empId").value;
    var empPass = document.getElementById("empPass").value;

    if( empId == "" )
    {
        alert("Enter id !");
    }
    else if( empPass == "" )
    {
        alert("Enter password !");
    }
    else
    {                 window.open("validateUser.jsp?"+"empId="+empId+"&empPass="+empPass,"_parent","",""); 
         alert("after");   
     }
}

2 个答案:

答案 0 :(得分:2)

因为window.open之后的代码会立即执行,并且此时未加载窗口。

使用.alert只是巧合,如果您在加载窗口之前解除了警报,它仍然无效。

var newwin = window.open("validateUser.jsp?"+"empId="+empId+"&empPass="+empPass,"_parent","",""); 
newwin.onload = function() {
    //do stuff
};

答案 1 :(得分:1)

浏览器不会等待window.open()引用的URL在返回之前加载。因此,如果没有alert(),您的“validateloginForm”函数将立即返回。

浏览器中的内容通常是异步。特别是等待window.open()完成是没有办法的。您可以将页面中的代码加载到新窗口中,然后在父(“开启者”)页面上调用某些函数。