下面是我的代码:
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()"/> :
</div>现在,当我使用id=search在文本框中输入一个字符时,函数search_buddy似乎没有被触发。然而,如果我输入两个或两个以上的字符,函数就会工作perfectly.Why,这是不是真的发生了?
发布于 2010-10-08 18:53:24
关于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");
}注意:"alert“会暂停所有的JavaScript处理,这样你就可以看到什么时候发生了什么事件。
https://stackoverflow.com/questions/3889692
复制相似问题