0

これが私のコードです:

function search_buddy() 
{
    $.post("num.php",function (ret){
        num=ret;
    });
    $("#Layer7").html(num);
}
</script>

<div id="Layer8">
     Find a buddy : 
    <input type="text" id="search" onkeyup="search_buddy()"/>&nbsp;:
</div>

ここで、id = searchを使用してテキストボックスに1文字を入力すると、関数search_buddyがトリガーされないようです。一方、2文字以上入力すると、機能は完全に機能しますが、なぜこれが発生するのですか?

4

1 に答える 1

0

DOMイベントに関する最高のリソース:http ://www.quirksmode.org/dom/events/keys.html

イベントハンドラー「search_buddy」が非同期のAJAXリクエストを起動しているようです。関数の残りの部分はAJAXリクエストと並行して実行されるため、$。postが返される前に「num」は未定義です。

// num is undefined here... unless your network has 0 latency
$("#Layer7").html(num);

このコード(上に貼り付けたもの)をコールバック関数でラップする必要があります。パラメータ番号3のようです:http: //api.jquery.com/jQuery.post/

テストされていませんが、最も良い推測です:

function search_buddy() {
    $.post("num.php", function (ret) {
        num=ret;
        $("#Layer7").html(num);
    });
}

理解に役立ついくつかの変更を次に示します。

function search_buddy() {
    alert("before the $.post execution");
    $.post("num.php", function (ret) {
        num=ret;
        $("#Layer7").html(num);
        alert("$.post callback");
    });
    alert("immediately after the $.post execution");
}

注:「アラート」はすべてのJavaScript処理を停止するため、どのイベントがいつ発生するかを確認できます。

于 2010-10-08T10:53:23.963 に答える