用户完成键入而不是在键盘上运行JavaScript功能?

我想在用户输入文本框时触发ajax请求。 我不希望它在每次用户键入一个字母时运行该函数,因为这会导致大量的ajax请求,但是我不希望他们必须点击输入按钮。

有没有办法让我可以检测用户何时完成键入,然后执行ajax请求?

在这里使用jQuery! 戴夫


所以,我要猜测完成打字意味着你只停留了一段时间,比如5秒。 因此,考虑到这一点,我们可以在用户释放一个密钥并在按下某个密钥时将其清除,然后启动计时器。 我决定输入的问题将是#myInput。

做一些假设......

//setup before functions
var typingTimer;                //timer identifier
var doneTypingInterval = 5000;  //time in ms, 5 second for example
var $input = $('#myInput');

//on keyup, start the countdown
$input.on('keyup', function () {
  clearTimeout(typingTimer);
  typingTimer = setTimeout(doneTyping, doneTypingInterval);
});

//on keydown, clear the countdown 
$input.on('keydown', function () {
  clearTimeout(typingTimer);
});

//user is "finished typing," do something
function doneTyping () {
  //do something
}

上面选择的答案不起作用。

由于打字定时器偶尔会被设置多次(在快速打字机等触发keydown之前按键两次),那么它不能正确清除。

下面的解决方案解决了这个问题,并在完成OP后请求X秒。 它也不再需要多余的keydown函数。 我还添加了一个检查,以便在您的输入为空时不会发生您的函数调用。

//setup before functions
var typingTimer;                //timer identifier
var doneTypingInterval = 5000;  //time in ms (5 seconds)

//on keyup, start the countdown
$('#myInput').keyup(function(){
    clearTimeout(typingTimer);
    if ($('#myInput').val()) {
        typingTimer = setTimeout(doneTyping, doneTypingInterval);
    }
});

//user is "finished typing," do something
function doneTyping () {
    //do something
}

这只是一行 underscore.js去抖功能:

$('#my-input-box').keyup(_.debounce(doSomething , 500));

这基本上是说DoSomething的 500毫秒后,我停止打字。

欲了解更多信息:http://underscorejs.org/#debounce

链接地址: http://www.djcxy.com/p/8051.html

上一篇: Run javascript function when user finishes typing instead of on key up?

下一篇: How to make $.post() use contentType=application/json?