2012-05-04 179 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:發佈您找到的解決方案,並將其標記爲接受以幫助其他人。您還將提高非常低的接受評級。 –