2012-05-04 147 views
-3

我将事件监听器添加到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); 
}); 
+1

http://stackoverflow.com/questions/10432651/removing-event-listener –

回答

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); 
+0

感谢您的回答。这不是解决我的问题的方法,但它是领先的。因为我将参数传递给tasiSuruklemeyeBasla()函数中的另一个函数。 – osmanraifgunes

+0

@gipsydipsydoo:发布您找到的解决方案,并将其标记为接受以帮助其他人。您还将提高非常低的接受评级。 –