首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >onkeyup事件JavaScript

onkeyup事件JavaScript
EN

Stack Overflow用户
提问于 2010-10-08 18:34:05
回答 1查看 2.1K关注 0票数 0

下面是我的代码:

代码语言:javascript
复制
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似乎没有被触发。然而,如果我输入两个或两个以上的字符,函数就会工作perfectly.Why,这是不是真的发生了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-08 18:53:24

关于DOM事件的最佳资源:http://www.quirksmode.org/dom/events/keys.html

看起来您的事件处理程序"search_buddy“触发了一个AJAX请求,这是异步的。函数的其余部分与AJAX请求并行运行,因此在$.post返回之前未定义"num“。

代码语言:javascript
复制
// num is undefined here... unless your network has 0 latency
$("#Layer7").html(num);

您需要将此代码(粘贴在上面)包装在一个回调函数中。它看起来是参数编号3:http://api.jquery.com/jQuery.post/

未经测试,但最好的猜测是:

代码语言:javascript
复制
function search_buddy() {
    $.post("num.php", function (ret) {
        num=ret;
        $("#Layer7").html(num);
    });
}

以下是一些修改,以帮助您理解:

代码语言:javascript
复制
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处理,这样你就可以看到什么时候发生了什么事件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3889692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档