我有一个从输入文本字段上的keyPress监听器调用的以下函数。 _.debounce()工作正常,除了在时间段之后只触发函数1次,它会在keyPress事件发生时触发多次。
console.log("Pre Debounce");
var debounced = _.debounce(function() {
console.log("Field updated!");
}, 2000);
debounced();
有没有办法将_.debounce功能限制为仅在该时间段后触发1次?
答案 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>