我想在用户暂停输入时触发 ajax 操作(而不是在每次按键后)。所以我做了这样的事情:
当用户在闲置 3 秒后停止输入时,函数 done 将被执行...(它是 - 但为什么长短语会执行 3 次 - 我希望它只运行一次,因为我在每次按键后清除超时).有什么问题?
var timer;
var interval = 3000;
$('#inp').keyup(function() {
timer = setTimeout(done, interval);
});
$('#inp').keydown(function() {
clearTimeout(timer)
});
function done() {
console.log('ajax');
}
jsfiddle 上的工作示例: http://jsfiddle.net/vtwVH/
最佳答案
打字时,您有时可能会在松开第一个键之前按下另一个键。您可能不会注意到这一点,尤其是在您输入长短语时。在这种情况下,事件的顺序不是down up down up
,而是down down up up
,因此将设置两个超时。
在设置超时之前(在同一个事件处理程序中)清除超时更加一致。
关于JavaScript 超时触发 3 次而不是一次(clearTimeout 不起作用?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14646860/