as3 - 删除在addEventListener参数中定义了函数的EventListener

时间:2015-01-27 10:46:34

标签: actionscript-3 function parameters event-listener

如果我按如下所示添加事件监听器:



buttons[i][j].addEventListener(Event.ENTER_FRAME, function(e:Event){trace("foo");});




如何删除此EventListener? 我试过这个但是,它似乎没有用。 :S



buttons[i][j].removeEventListener(Event.ENTER_FRAME, function(e:Event){trace("foo");});




提前致谢!

3 个答案:

答案 0 :(得分:0)

您可以尝试:

 myObject.addEventListener(Event.ENTER_FRAME, function(event:Event):void
 {
      // event.currentTarget (in this case myObject)
      // event.type (in this case Event.ENTER_FRAME)
      // arguments.callee (reference to the current function)
      event.currentTarget.removeEventListener(event.type, arguments.callee);
      trace("foo");
 });

答案 1 :(得分:0)

在定义处理事件时调用的函数时,它可以正常工作。 在你的情况下:

buttons[i][j].addEventListener(Event.ENTER_FRAME, myFunction);

function myFunction(e:Event){
     trace("foo");
}

然后删除EventListener:

buttons[i][j].removeEventListener(Event.ENTER_FRAME, myFunction);

希望这有帮助。

答案 2 :(得分:0)

根据定义,如果您匿名定义它,则无法删除该侦听器。这就是使用该语法的全部目的。因此,如果你不是那个意思,那么你必须切换到一个已定义的监听器。如果你的意思是那么你必须使用weakReference:

addEventListener(Event.ENTER_FRAME, function(e:Event){trace("foo");}, false, 0, true);

最后一个参数'true'使其变弱并确保当引用的对象不再存在时事件将是gc。

使用匿名侦听器而不将weakRefernce设置为true是一个错误。