使用Underscore _.debounce()来触发单个事件

时间:2015-07-26 17:19:12

标签: javascript backbone.js underscore.js

我有一个从输入文本字段上的keyPress监听器调用的以下函数。 _.debounce()工作正常,除了在时间段之后只触发函数1次,它会在keyPress事件发生时触发多次。

console.log("Pre Debounce");
var debounced = _.debounce(function() {
    console.log("Field updated!");
}, 2000);

debounced();

有没有办法将_.debounce功能限制为仅在该时间段后触发1次?

2 个答案:

答案 0 :(得分:1)

您的去抖功能可能比用户输入的时间更长。在这种情况下,您希望通过将第三个参数(立即)传递为true来确保防止双重去抖动。

去抖功能签名是:_.debounce(function, wait, [immediate])

所以将代码更改为:

console.log("Pre Debounce");
var debounced = _.debounce(function() {
    console.log("Field updated!");
}, 2000, true);

debounced();

答案 1 :(得分:1)

可能每次在事件中构建去抖动功能。如果是您的情况,请在事件响应代码之外使用您的去抖功能。据我所知,debounced函数应该只生成一次,然后多次调用。

另一件可能变得奇怪的事情是当你进行异步调用时(例如使用ajax自动完成)并且它需要的时间超过你的去抖动时间,然后请求可能会在稍后发出,使得debouncing无法正常工作。 / p>