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 に答える