删除JavaScript事件:为什么这个例子不起作用?
Removing a JavaScript event: Why is this example not working?
我正在努力删除一个JavaScript事件,该事件以前已添加到一个DOM元素与element.addEventListener
:
$(() => {
var example = {
init() {
this.element = document.getElementById('foo');
this.element.addEventListener('mousedown', this.start.bind(this));
},
start() {
console.log('start');
this.element.addEventListener('mouseup', this.stop.bind(this));
},
stop() {
console.log('stop');
this.element.removeEventListener('mouseup', this.stop);
}
};
var bar = Object.create(example);
bar.init();
});
小提琴
当点击元素并按住鼠标按钮时,'start'会被记录。一旦鼠标按钮被释放,'stop'就会被记录下来。第一次按预期工作,但第二次"stop"被记录了两次,然后是三次,然后是四次……这意味着在stop()
中,事件没有被正确移除。
我知道我必须将完全相同的实例传递给removeEventListener
,我传递给addEventListener
,但对我来说,在这种情况下这似乎是正确的,所以我有点失去了为什么这不能正常工作。
它不起作用,因为bind
返回一个新函数,这与您的原始函数不同。您正在添加一个处理程序,但试图删除另一个处理程序。
您需要存储某个地方的bind
的返回值,并使用它来添加和删除事件处理程序。
相关文章:
- 为什么这个 .push 不起作用?(JavaScript)
- document.createelement不起作用(javascript)
- Chrome 中表格的 CSV 导出不起作用 - JavaScript/AngularJS
- 如果语句不起作用 - JavaScript
- 为什么我的动态更改链接不起作用?(Javascript)
- RPS 函数不起作用(JavaScript)
- 计时器间隔不起作用 Javascript
- 通过返回 false - 不起作用(javascript)来阻止链接打开
- Eval 不起作用 - JavaScript
- Android 浏览器 .click() 不起作用 javascript
- 为什么这段代码不起作用?Javascript
- jsFiddle显示正确,但一旦在本地运行就不起作用(Javascript)
- 带有html的Navigator不起作用javascript
- 从文本文件中提取内容不起作用 JavaScript
- 从查询字符串中获取参数;不起作用..Javascript
- regex手机验证不起作用-javascript
- if和else语句不起作用(javascript)(html)
- 更改字体大小的复选框不起作用-Javascript
- 为什么这个基本的 if 语句不起作用?JavaScript
- Timer 不起作用/ JavaScript/ innerHTML null