Underscore: _.debounce() 丢失 event.currentTarget

创建于 2014-10-23  ·  8评论  ·  资料来源: jashkenas/underscore

addEventListener_.debounce() $ 一起使用时,我无法获得event.currentTarget #$ 。

这是一个小提琴

最有用的评论

@jridgewell知道如何在 React onChange 中解决这个问题。 当我不使用 debounce 时,我可以在 onChange 函数中访问正确的事件,但是当我使用_.debounce时,我会丢失正确的event – 见下文

// in my render
<input onChange={ _.debounce(this.updateNote.bind(this), 500) } />
// my change handler
updateNote(event) {
    // undefined on event.target, get lodash event not <input/> event target
    const note = event.target.value
    this.sendNote({ note })
 }

所有8条评论

如果在下划线范围之外的事件对象引用上更改了属性。 如果您使用像 jQuery 这样的库,这可能会有所帮助,因为它们会生成一个合成事件对象,您应该可以毫无问题地引用该对象。

我不认为你会解决这个问题。 event在向上传播 DOM 时被重用, currentTarget为每个带有侦听器的元素而变化。 小提琴

传递第二个参数可以解决这个问题。 小提琴

var debounced = _.debounce(fn, 50);
document.querySelector('.debounced-input').addEventListener('keyup', function(event) {
    debounced(event, event.currentTarget);
});

是的,这超出了下划线的范围。 考虑一个像gator这样的 DOM 事件微框架

我仍然可以通过this获得currentTarget通常具有的元素; 我刚刚打开了这个问题,以确保我所看到的实际上是预期的行为。

@jridgewell知道如何在 React onChange 中解决这个问题。 当我不使用 debounce 时,我可以在 onChange 函数中访问正确的事件,但是当我使用_.debounce时,我会丢失正确的event – 见下文

// in my render
<input onChange={ _.debounce(this.updateNote.bind(this), 500) } />
// my change handler
updateNote(event) {
    // undefined on event.target, get lodash event not <input/> event target
    const note = event.target.value
    this.sendNote({ note })
 }

请参阅我的第二个建议

这是一个实施问题。 您需要持久化事件。 onChange 应该调用持久化,然后将持久化事件传递给去抖动处理程序:

onChange_persist = (e) =>
{
    e.persist();
    e.onChange_debounced(e);
}
此页面是否有帮助?
0 / 5 - 0 等级

相关问题

umarfarooq125 picture umarfarooq125  ·  8评论

chikamichi picture chikamichi  ·  8评论

clouddueling picture clouddueling  ·  3评论

jdalton picture jdalton  ·  4评论

acl0056 picture acl0056  ·  5评论