javascript - 动态添加和删除事件监听器

标签 javascript polymer polymer-1.0

我使用

向自定义元素中的 div 添加了一个点击监听器
var nicediv = document.getElementById('nicediv');
nicediv.addEventListener('tap',this.listenerfunc.bind(this),false);

这是成功的,但我无法删除事件监听器。这没有用。

nicediv.removeEventListener('tap',this.listenerfunc);

有什么想法吗?

最佳答案

问题是监听函数与您试图删除的函数不同。通过添加 .bind(this),您已经更改了函数。换句话说,this.listenerfunc !== this.listenerfunc.bind(this)

此问题在 addEventListener 的 MDN 页面上得到了解决.请参阅“处理程序中 this 的值”。

解决此问题的快速方法是:

var handler = this.listenerfunc.bind(this);
nicediv.addEventListener('tap', handler, false);
...
nicediv.removeEventListener('tap', handler);

但是,如果要从添加监听器的位置移除另一个范围内的监听器,则需要保留对 handler 的引用。

我要修复它的方法是转到 this.listenerfunc 的定义并将 .bind(this) 放在定义上!

关于javascript - 动态添加和删除事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30809682/

相关文章:

javascript - jQuery - 与 Firefox 的兼容性问题

JavaScript 使用 "new"

javascript - element.animate,在动画完成后应用样式更改

javascript - polymer 阵列添加元素两次

javascript - polymer - 结束绑定(bind)事件时 dom-repeat?

javascript - 使用 Polymer 访问嵌套在对象中的数组中对象的值

javascript - {{variable}} 未解释

javascript - 取消音频淡出然后淡入 - Web Audio API

javascript - 具有远程数据和分页支持的 Qooxdoo 表

html - 如何在自定义元素 (Polymer 1.0) 内设置纸张元素的样式?