1 回答
TA贡献1831条经验 获得超9个赞
该.bind()方法返回一个新函数,因此您作为回调添加到的函数addEventListener是对您要删除的函数的不同引用。因此,事件侦听器不会被删除。
您可以考虑像这样在构造函数中进行绑定:
constructor() {
...
this.closeDesktopSearchMenu = this.closeDesktopSearchMenu.bind(this);
...
}
然后像这样使用你的方法(没有绑定,就像现在在构造函数中完成的那样):
openDesktopSearchMenu() {
this.$desktopSearchMenu.style.height = '330px';
document.addEventListener('click', this.closeDesktopSearchMenu, true);
}
closeDesktopSearchMenu() {
this.$desktopSearchMenu.style.height = '0px';
document.removeEventListener('click', this.closeDesktopSearchMen, true);
}
请参阅下面的示例片段:
class Test {
constructor() {
this.prop = "bar";
this.foo = this.foo.bind(this);
}
foo() {
console.log('Foo', this.prop);
}
a() {
document.addEventListener('click', this.foo, true);
}
b() {
document.removeEventListener('click', this.foo, true);
}
}
const test = new Test();
console.log("Event listener added");
test.a();
setTimeout(() => {
console.log("Event listener removed");
test.b();
}, 3000);
添加回答
举报