22

我正在编写一个简单的脚本来提取输入 keyup 事件的数据库信息。

我遇到的问题是每次用户按下一个键时都会重复 keyup 事件。我怎样才能让它只有在按下最后一个键后才能工作?

我想我应该在每次按键后使用像 setTimeOut() 这样的函数,但我不知道如何......你能给我一个简单的例子吗?

对不起,我的英语不好 :)

这是我想做的事情:

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

3 回答 3

42
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);
});
于 2012-05-09T16:26:24.113 回答
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 代码写回服务器。

于 2012-05-09T16:45:08.130 回答
0

我认为如果您使用 onchange 事件执行此操作,则无需进行时间间隔检查。每当您完成输入并更改焦点时。它会为您触发 onchange 事件

$("input").onchange(function()
{
   //extract database info
}
于 2012-05-09T17:19:27.707 回答