使用jQuery,只有在最后一个按键之后才触发keyup事件。

22

我正在编写一个简单的脚本,以便在输入键盘事件时提取数据库信息。

我的问题是,每次用户按下键时,keyup事件总是重复发生。如何使它仅在最后一个按键后起作用?

我认为我应该在每个keyup之后使用像setTimeOut()这样的函数,但我不知道如何操作... 您能否给我一个简单的例子吗?

抱歉我的英语不好 :)

这是我尝试做的:

$("input").keyup(function()
{
    var timer=setTimeout(function() {
    }, 1000);
    if(!timer)
    {
        //do .post ajax request
    }
});
3个回答

45
var timer;

$("input").on('keyup', function() {
    clearTimeout(timer);  //clear any running timeout on key up
    timer = setTimeout(function() { //then give it a second to see if the user is finished
        //do .post ajax request //then do the ajax call
    }, 1000);
});

7

您已经接近成功了。如果用户输入另一个字母,您只需要清除计时器即可;否则,无论他们是否继续输入,您的回调函数都将在1000毫秒后执行。

像这样的代码应该可以解决问题:

$("input").keyup(function (event)
{
    var self = this;
    if (self.timer)
        clearTimeout(self.timer);

    self.timer = setTimeout(function ()
    {
        self.timer = null;
        alert(self.value);
    }, 1000);

});

在这个警告框中,您应该放置用于向服务器写回的ajax代码。


0

我认为如果你使用onchange事件来完成这个操作,就不需要进行时间间隔检查。每当你完成输入并改变焦点时,它会自动触发onchange事件。

$("input").onchange(function()
{
   //extract database info
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接