2012-07-15 64 views
0

有人發現,他們的JavaScript不工作,但是當他們通過代碼的步驟,它工作正常嗎?發生在這條線javascripts的作品,當我步驟通過doesnt,如果我不

var cookie = getCookie('lusr'); 
var username = cookie; 
if(!cookie){ 
    $("#UserNav").load("loginform.html"); 
    $("#loginbtn").click(function(){ 
     var username = $("#usernametxt").val(); 
     var password = $("#passwordtxt").val(); 
     login(username,password); 
    }); 
}else{ 
    $("#UserNav").load("user.htm"); 
    $("#WelcomeUser").text("Welcome "+ username); 
} 

我的問題:

 $("#WelcomeUser").text("Welcome "+ username); 

回答

1

這是因爲load()異步:它立即返回,在後臺執行它的工作,然後在任務完成時調用用戶提供的函數。步進延遲給你的錯覺是該函數是同步的,並在返回之前執行其所有工作。

因此,你應該通過一個回調函數來load()並執行回調裏面的後續工作:

var cookie = getCookie("lusr"); 
if(!cookie) { 
    $("#UserNav").load("loginform.html", function() { 
     $("#loginbtn").click(function() { 
      var username = $("#usernametxt").val(); 
      var password = $("#passwordtxt").val(); 
      login(username, password); 
     }); 
    }); 
} else { 
    $("#UserNav").load("user.htm", function() { 
     $("#WelcomeUser").text("Welcome " + cookie); 
    }); 
} 
+0

哈哈非常感謝應閱讀文檔多一點:) – Billybonks 2012-07-15 13:08:32

1

您正在使用load()功能,異步從服務器上獲取數據。這意味着您的表單在搜索其字段時未加載。

當您逐步完成工作時,它的工作原因是因爲它讓您有時間在步驟中加載表單。

您可以使用另一個具有異步回調函數的加載版本,允許您提供僅在加載完成後才能調用的功能。

查看jQuery docs瞭解更多信息。

相關問題