2012-08-11 63 views
1

我有一個頁面index.jsp可在此鏈接https://www.dropbox.com/s/0smy7nlcmilkqt4/index.jsp爲什麼我需要在調用window.open()之後寫alert()?

此文件包含一個名爲validateloginForm()的JavaScript方法,用於驗證輸入字段。

如果填充的字段會重定向到另一個JSP頁面,但是當我刪除window.open()行下方的alert("after");行時,它不會重定向到另一個頁面。

請致電window.open()後讓我知道爲什麼我需要這個alert("after")

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

因爲window.open之後的代碼立即執行,並且窗口未在該位置加載。

使用.alert只是一個巧合,如果您在加載窗口之前解除了警報,它仍然不起作用。

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

瀏覽器不會等到window.open()引用的URL在返回之前加載。因此,如果沒有alert(),您的「validateloginForm」函數將立即返回。

瀏覽器中的一般情況是異步。特別是,無法等待window.open()完成。當然,您可以讓頁面中的代碼加載到新窗口中,然後在父頁(「開啓者」)頁面上調用某個函數。

+0

感謝你們兩個(Esailija和Pointy)爲我解釋這一點。 – 2012-08-11 11:36:36

相關問題