动态添加和删除事件侦听器
Dynamically adding and removing Event listeners
我使用
向自定义元素中的 div 添加了点击侦听器
var nicediv = document.getElementById('nicediv');
nicediv.addEventListener('tap',this.listenerfunc.bind(this),false);
这是成功的,但我无法删除事件侦听器。这没有用。
nicediv.removeEventListener('tap',this.listenerfunc);
有什么想法吗?
问题是监听函数与您试图删除的函数不同。通过添加 .bind(this)
,您已更改函数。换句话说,this.listenerfunc
!== this.listenerfunc.bind(this)
.
此问题已在 addEventListener 的 MDN 页面上得到解决。参见 "The value of this within the handler"。
解决此问题的快速方法是:
var handler = this.listenerfunc.bind(this);
nicediv.addEventListener('tap', handler, false);
...
nicediv.removeEventListener('tap', handler);
但是,如果要从添加监听器的位置移除另一个范围内的监听器,则需要保留对 handler
的引用。
我要修复它的方法是转到 this.listenerfunc
的定义并将 .bind(this)
放在定义的右边!
我使用
向自定义元素中的 div 添加了点击侦听器var nicediv = document.getElementById('nicediv');
nicediv.addEventListener('tap',this.listenerfunc.bind(this),false);
这是成功的,但我无法删除事件侦听器。这没有用。
nicediv.removeEventListener('tap',this.listenerfunc);
有什么想法吗?
问题是监听函数与您试图删除的函数不同。通过添加 .bind(this)
,您已更改函数。换句话说,this.listenerfunc
!== this.listenerfunc.bind(this)
.
此问题已在 addEventListener 的 MDN 页面上得到解决。参见 "The value of this within the handler"。
解决此问题的快速方法是:
var handler = this.listenerfunc.bind(this);
nicediv.addEventListener('tap', handler, false);
...
nicediv.removeEventListener('tap', handler);
但是,如果要从添加监听器的位置移除另一个范围内的监听器,则需要保留对 handler
的引用。
我要修复它的方法是转到 this.listenerfunc
的定义并将 .bind(this)
放在定义的右边!