JavaScript 超时触发 3 次而不是一次(clearTimeout 不起作用?)

标签 javascript jquery

我想在用户暂停输入时触发 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/

相关文章:

javascript - 在文本中提及用户计数

javascript - 我什么时候需要转义 metacharectars? (jQuery 选择器)

javascript - 将超大屏幕背景图像溢出到导航栏

javascript - iOS 上的 IFrame 高度问题(移动版 safari)

javascript - HTML5 工作线程功能是否公开了机器上的内核数量?

javascript - Visual Studio 2013 中全新 ASP .NET MVC 5 Web 应用程序中的 .NET 和 Java 脚本异常

javascript - 无法从工厂 AngularJS 中的 JSON 文件中提取数据

javascript - 使用 Angular 在表单中填充数据

javascript - 模态捕获其他模态的点击

javascript - 导航栏粘滞在 html 中无法正常工作