用户完成键入而不是在键盘上运行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?