【发布时间】:2021-06-20 22:37:23
【问题描述】:
我正在尝试删除一个 eventListener,但看起来我错过了一些东西。
为什么下面的代码不起作用,它没有从按钮中删除事件监听器。
我也尝试绑定 this 以传递范围,但这也不起作用
class Test {
eventHandler(e) {
console.log(e.target.id)
alert()
// no effect
e.target.removeEventListener("click", this.eventHandler)
// no effect either
document.getElementById(e.target.id).removeEventListener("click", this.eventHandler)
}
constructor() {
let b = document.getElementById("b")
b.addEventListener("click", this.eventHandler)
//b.addEventListener("click", this.eventHandler.bind(this) )
}
}
new Test()
<button id="b">
click me
</button>
【问题讨论】:
-
当有人想要删除事件处理程序时,总是会产生代码异味。为什么不使用标志/状态停用它?
-
@pejmankheyri "...,修复语法问题" - 什么语法问题?您的编辑删除了问题的一部分(恕我直言)...
-
b.addEventListener("click", e => this.eventHandler(e) );.没有改变任何东西,它不起作用,你想创建一个工作示例吗? -
@Andreas 我没有删除代码部分!这一定是一个错误!我刚刚编辑了代码上面的文字!
-
可能是上下文问题。试试这个
b.addEventListener('click', this.eventHandler.bind(this))
标签: javascript dom-events removeeventlistener