0

有没有人发现他们的 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);
4

2 回答 2

1

您正在使用load()从服务器异步获取的功能。这意味着您的表单在您搜索其字段时尚未加载。

它在您单步执行时起作用的原因是因为它可以在您单步执行时加载表单。

您可以使用具有异步回调函数的另一个版本的加载,允许您提供仅在加载完成后才调用的功能。

查看jQuery 文档以获取更多信息。

于 2012-07-15T12:48:19.687 回答
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);
    });
}
于 2012-07-15T12:48:42.070 回答