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 的文本框中输入一个字符时,函数 search_buddy 似乎没有被触发。然而,如果我输入两个或更多字符,该功能完美运行。为什么会发生这种情况?

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 回答