removin事件监听器[重复]

问题描述 投票:-3回答:1

此问题与以下内容完全相同:

我正在将事件监听器添加到25个影片剪辑中。如果要使用其中之一,我想从所有事件监听器中删除所有事件监听器。

var myMvc:movieclip; 
myMvc.addEventListener(MouseEvent.MOUSE_DOWN, function(e:MouseEvent)
{
   tasiSuruklemeyeBasla(e,myMvc,1,1);
   IEventDispatcher(e.currentTarget).removeEventListener(e.type,argu‌​ments.callee);
});
actionscript-3 flash
1个回答
1
投票

您在这里正在为每个侦听器创建一个单独的匿名函数对象。这没有多大意义,因为事件处理程序的代码对于所有侦听器都是相同的。也许您正在尝试将数据与每个事件处理程序一起传递,以便能够确定触发了哪个剪辑。有很多更好的方法可以实现此目的,而无需为每个侦听器创建单独的处理程序。

无论如何,要能够随时删除侦听器,您必须将对处理程序的引用保存在某个地方。例如,您可以声明一个事件处理函数,并将其引用传递给所有侦听器(最好在文档类或其他类中声明它,但它也适用于时间轴代码)。

var eventHandler:Function = function(e:MouseEvent):void
{
   var target:MovieClip = e.target as MovieClip;
   tasiSuruklemeyeBasla(e,target,1,1);
   target.removeEventListener(e.type,argu‌​ments.callee);
};

myMvc.addEventListener(MouseEvent.MOUSE_DOWN, eventHandler);

// you can do that any time
myMvc.removeEventListener(MouseEvent.MOUSE_DOWN, eventHandler);
© www.soinside.com 2019 - 2024. All rights reserved.