【问题标题】:createjs off() function to remove listener from js arrow function [duplicate]createjs off()函数从js箭头函数中删除监听器[重复]
【发布时间】:2020-03-17 10:33:22
【问题描述】:

我使用createjs的on()函数:

myObj.on("mousedown", (e)=>{
    this.myObjMouseDown(e);
});

现在,我想删除监听器,我尝试使用 off() 函数编写这段代码:

myObj.off("mousedown", (e)=>{
    this.myObjMouseDown(e);
});

但是,代码似乎无法正常工作。

我应该如何写来取消活动?

注意:注意我需要使用箭头函数,因为“this”这个词。

【问题讨论】:

  • createjs 是否提供on/off 事件处理方法?还是你也在加载 jQuery?
  • 没有 jQuery。只有 createjs 和 zimjs。 on() 是 createjs 的方法。
  • 如果您不想使用箭头函数,也可以只使用第三个参数(范围)。 obj.on("click", fn, this);

标签: javascript createjs arrow-functions


【解决方案1】:

您必须传递对同一函数的引用——但重要的是要注意on 方法无论如何都会为您创建一个包装函数,因为它还允许您传递范围参数。 on/off 方法专门用于解决 ES5 中的范围问题。 (docs)

确保您可以取消订阅的最佳方法是存储对on 函数调用值的引用,并将其传递给off()

var evt = obj.on("click", () => doSomething());
// later
obj.off("click", evt);

另一个取消事件的好方法是在函数回调中删除它们:

doSomething(evt) {
    // Your Code
    if (condition) {
        evt.remove();
    }
}

最后,如果您只是想进行清理,请使用 removeAllEventListeners (docs),您可以将可选的事件类型传递给它。

obj.removeAllEventListeners("click");

【讨论】:

  • 在这种情况下,obj.removeAllEventListeners("mousedown"); - 做的工作!谢谢@Lanny!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-19
  • 2016-03-25
  • 2014-09-29
  • 1970-01-01
  • 2017-05-22
相关资源
最近更新 更多