如何使用.bind(this)删除对象的事件侦听器
How to remove event listener of a object with .bind(this)?
内部对象构造函数:
this.notification.addEventListener(barcodeScanner.NEW_READING, this.handleBarcode.bind(this));
当它摧毁:
this.notification.removeEventListener(barcodeScanner.NEW_READING, this.handleBarcode.bind(this), this);
我可以添加事件侦听器并正常工作,但当对象销毁时,我不能删除单个事件侦听器。
虽然这与问题没有太大的关系,但我使用的是EventDispatcher.js和Class.js.
我可以在EventDispatcher.js中修改代码以满足我的需要。但是,如何在不删除所有其他侦听器的情况下删除对象函数的事件侦听器?
它不会被删除,因为它是一个不同的对象。
.bind()
每次都返回一个新对象。
你需要把它存储在某个地方,然后用它来删除:
var handler = this.handleBarcode.bind(this);
然后
this.notification.addEventListener(barcodeScanner.NEW_READING, handler);
或
this.notification.removeEventListener(barcodeScanner.NEW_READING, handler);
以下是如何在某些组件中绑定和解除绑定事件处理程序的方法:
var o = {
list: [1, 2, 3, 4],
add: function () {
var b = document.getElementsByTagName('body')[0];
b.addEventListener('click', this._onClick());
},
remove: function () {
var b = document.getElementsByTagName('body')[0];
b.removeEventListener('click', this._onClick());
},
_onClick: function () {
this.clickFn = this.clickFn || this._showLog.bind(this);
return this.clickFn;
},
_showLog: function (e) {
console.log('click', this.list, e);
}
};
// Example to test the solution
o.add();
setTimeout(function () {
console.log('setTimeout');
o.remove();
}, 5000);
相关文章:
- 将事件附加到对象/数组
- 在创建对象后附加一个jquery事件
- JavaScript:点击事件中对象的值
- 如何从已注册的事件发送 JavaScript 对象
- jsplumb中的Click事件处理程序丢失“;这个“;对象
- 枚举附加到文档的HTML对象的所有事件
- 通过单击事件识别画布上的对象
- jQuery UI draggable:绑定到mousemove事件中的对象
- 如果在对象上触发了dispatchEvent,我如何才能找到如何侦听它以及在哪里调度事件
- 如何从jQuery的事件对象中检索属性
- 如何在动态创建元素的内联onclick事件中传递对象
- 如何在JavaScript中基于事件对象获取文件名
- 如何在不删除类似侦听器的情况下从父对象中删除jQuery事件侦听器
- YES或NO表示对象事件中的分号
- Javascript关闭DOM对象事件和事件冒泡
- 存储对象事件的内容
- 将 JS 函数附加到动态创建的对象事件
- 未捕获的类型错误:对象 #<事件> 没有方法“拆分”
- javascript中的ONDELETE对象事件
- 嵌套对象事件