有没有人发现他们的javascript不起作用,但当他们单步执行代码时,它可以正常工作吗?
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);
答案 0 :(得分:1)
您正在使用从服务器异步提取的load()
函数。这意味着您在搜索其字段时尚未加载表单。
当您单步执行时它起作用的原因是因为它让您有时间在步骤时加载表单。
您可以使用具有异步回调函数的其他版本的加载,允许您提供仅在加载完成后调用的功能。
查看jQuery docs了解详情。
答案 1 :(得分: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);
});
}