使用object's方法作为事件处理程序,如何删除它?
Using an object's method as an event handler, how do I remove it?
如果我注册一个对象的方法作为事件处理程序,我不能删除它。我是不是漏掉了什么明显的东西,或者这是不可能做到的?
function Test() {
document.body.addEventListener( 'click', this.handler.bind( this ), false );
}
Test.prototype.handler = function() {
document.body.innerHTML += '.';
document.body.removeEventListener( 'click', this.handler.bind( this ), false );
};
new Test();
body {
border: 1px solid black;
width: 100px;
height: 100px;
font-size: 30px;
}
当您使用Function.prototype.bind
时,您创建了一个新函数。存储您自己对函数的引用,然后使用它来订阅和取消订阅。
var obj = {
method: function () {
return this.prop;
},
prop: true
};
var getProp = obj.method.bind(obj);
myHtmlElement.addEventListener("click", getProp, false);
myHtmlElement.removeEventListener("click", getProp, false);
每次调用bind
,将生成一个不同的函数:
func.bind(obj) === func.bind(obj); // false
因此,removeEventListener
不知道要删除哪个事件监听器。
this.realHandler = this.handler.bind(this)
然后,您将能够添加或删除this.realHandler
事件侦听器。
相关文章:
- 使用php或javascript从facebook相册URL中删除多余的部分
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 如何删除多行HTML排列中的空白
- 如何从rails中的代码中删除新行( )
- 删除对HTML元素的拖动
- 当图像转换为本地存储的DataURL时,EXIF被删除
- 按顺序添加和删除类
- 从 DOM 中删除/删除 Javascript 用户定义的数组
- 命名函数“;删除“..删除是一个保留字
- 使用具有多个参数的猫鼬删除/删除
- 删除/删除 HTML 页面中的“:” 冒号
- 滚动条从何而来,如何删除它
- 如何删除/删除Firebase上的节点
- 我想,当我按下删除按钮删除删除按钮所代表的元素时
- 主干:查看删除/删除
- 删除/删除部分隐藏字段值的按钮单击
- Javascript从数据库中删除/删除表行
- 使用jQuery从HTML表中删除(删除)表行
- 删除删除ng网格中最后一行的功能
- 如何通过具有数组行的第一项的值来删除/删除 javascript 数组中的行