removeEventListener似乎正在获得不同版本的处理程序
removeEventListener seems to be getting a different version of the handler?
我有一个Calendar
类,实例化一次,然后在Calendar
的构造函数中实例化一次EventHandler
类。 我通过将this
事件侦听器(Calendar
对象(绑定到事件侦听器来添加它们,以便我可以访问它们中的Calendar
对象。 这一切都很好用。
也就是说,直到我尝试在事件处理程序中添加事件侦听器并将this
仍然是它们Calendar
对象绑定。 添加有效,但删除事件侦听器不起作用。 似乎删除正在获得我在添加它时传递的函数的不同副本。 以下是在Calendar
中添加的事件侦听器:
this.containerDiv.addEventListener("mousedown", this.eventHandler.calMousedown.bind(this));
那么在EventHandler
calMousedown
中,我这样做:
this.containerDiv.addEventListener("mousemove", this.eventHandler.calMousemove.bind(this));
但是在另一个处理程序中,我像这样删除该侦听器:
this.containerDiv.removeEventListener("mousemove", this.eventHandler.calMousemove.bind(this));
但它不会删除它。 this
应该是到处都是单个Calendar
对象,但就好像删除具有不同的函数副本一样。 我已经验证this
是所有处理程序中的Calendar
对象。 我还尝试删除删除.bind(this)
,这也不起作用。 这怎么不删除?
bind
创建一个新函数,但你可以缓存它:
var handler = this.eventHandler.calMousedown.bind(this);
this.containerDiv.addEventListener("mousedown", handler);
...
this.containerDiv.removeEventListener("mousedown", handler);
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- keyup事件处理程序更改焦点不适用于快速键入
- 如何使用jquery处理php循环通过元素
- angular.js没有'无法在PhoneGap中处理视图标记
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- 提示使用服务器端事件处理程序激活JavaScript
- JS编译器/包管理器,用于版本控制
- jQuery-2.1.1.min.js或最新版本jQuery-2.13.min.js不会't支持'@
- Chrome加载旧版本的Javascript文件
- 如何使用js将SNAPSHOT内部版本号转换为3位数的整数
- javascript:如何在antlr生成的Lexer中进行错误处理
- 如何编写一个具有公共标头的批处理
- 在同一个服务工作者中处理service-worker.js有任何影响吗
- 如何在IE8及以前版本中处理mousemove
- removeEventListener似乎正在获得不同版本的处理程序
- 使用jQuery,如何触发由另一个版本的jQuery处理的事件
- 如何在JMVC/Can.js中处理应用程序的版本控制
- indexedDB中的升级事件处理程序错误导致版本更改事务中止
- 处理同一个repo的多个版本
- 处理两个jQuery版本