2012-07-31 66 views
1

我想做到這一點:上述可以檢測到addEventListener,然後將其刪除?

if (rightBtn.addEventListener(MouseEvent.CLICK,goRight4)) 
{ 
rightBtn.removeEventListener(MouseEvent.CLICK,goRight4); 
trace("YES") 
} 
else{trace("NO")} 

是我寫的一個按鈕的代碼。

我已經添加了eventListener,但結果仍然是跟蹤NO。

任何想法或正確的方法來做到這一點?

如果rightBtn有多個事件,如MOUSE_OVER,MOUSE_OUT?我可以用一個命令將它們全部刪除嗎?

rightBtn.addEventListener(MouseEvent.CLICK,goRight4) 
rightBtn.addEventListener(MouseEvent.MOUSE_OVER,goRightOver) 
rightBtn.addEventListener(MouseEvent.MOUSE_OUT,goRightOut) 

if (rightBtn.addEventListener(MouseEvent.CLICK,goRight4)) 
{ 
rightBtn.removeEventListener(MouseEvent.CLICK,goRight4); 
rightBtn.removeEventListener(MouseEvent.MOUSE_OVER,goRightOver); 
rightBtn.removeEventListener(MouseEvent.MOUSE_OUT,goRightOut); 
trace("YES") 
} 
else{ 
trace("NO") 
} 

回答

4

您的代碼是錯誤的。根據AS3語言參考,addEventListener()返回void。如果要檢查偵聽器是否附加到您的實例,則必須使用hasEventListener()

if (rightBtn.hasEventListener(MouseEvent.CLICK)) { 
    rightBtn.removeEventListener(MouseEvent.CLICK, goRight4); 
    trace("YES"); 
} else { 
    trace("NO"); 
} 

但是,刪除事件偵聽器的最好方法是在不知道它是否已連接到您的實例的情況下將其刪除!

// Will not throw any error even if no listener was attached. 
rightBtn.removeEventListener(MouseEvent.CLICK, goRight4); 
+1

如果對象沒有在第一時間監聽事件,則調用'removeEventListener()'是無害的。正如@ puggsoy的回答所述,有時候可以通過使用'hasEventListener()'來欺騙,因爲如果其他類添加了事件偵聽器,該方法將返回true。我投了兩個答案:) – 2012-07-31 10:33:01

3

可以檢查對象有一個事件監聽器添加到它與hasEventListener(),就像這樣:

if(rightBtn.hasEventListener(MouseEvent.CLICK)) 
{ 
    rightBtn.removeEventListener(MouseEvent.CLICK, goRight4); 
    trace("YES"); 
} 
else 
{ 
    trace("NO"); 
} 

你會注意到的hasEventListener函數只有一個參數,該事件。這在大多數情況下都可以,因爲你可能不會有一個事件的多個監聽器函數。

相關問題