2012-01-10 33 views
1

我有一個容器與許多圖像。我不希望爲每個圖像上的點擊和其他鼠標事件添加監聽器,而只想在圖像的父級上監聽這些事件。ActionScript 3是否有某種事件委託系統?

這可能嗎?

+1

是的,可以這樣做,因爲AS支持冒泡,但是你必須使用別人的lib,或者自己動手,因爲沒有內置的方法。 – zzzzBov 2012-01-10 14:13:41

+5

如果我可以降評論,我會。 – 2012-01-10 14:50:14

回答

7
container.addEventListener(MouseEvent.CLICK, clickHandler); 
private function clickHandler(e:MouseEvent):void { 
    trace(e.currentTarget); // references container 
    trace(e.target); //references container's child or container itself depending on what has been clicked 
} 
+0

它是否支持鼠標操作? – Francisc 2012-01-10 14:42:53

+0

是的,它適用於所有類型的'MouseEvent' – package 2012-01-10 16:25:35

+0

謝謝,包。 – Francisc 2012-01-10 17:12:27

1

如果我正確地理解你的問題,那完全有可能。因此,假如你有這樣的:

parent.addChild(new Child()); 
parent.addChild(new Child()); 
parent.addChild(new Child()); 
parent.addChild(new Child()); 

那麼你應該能夠在事件監聽器綁定到父正是如此:

parent.addEventListener(MouseEvent.CLICK, handleClick); 

,然後你的處理器應該是這個樣子

private function handleClick(e:MouseEvent) { 
    // cast the target of the event as the correct class 
    var clickedChild:Child = Child(e.target); 

    // Do whatever you want to do. 
} 

您也可以將此與addEventListener的參數useCapture結合使用,以將事件附加到事件的捕獲端,而不是鼓泡端。並且還使用事件上的.stopPropagation()方法來阻止任何其他事件處理程序被觸發以及...

但是很難說如果您需要在不知道更多關於您要做什麼的情況下使用這些方法。但希望這會給你一個正確的方向。

+0

這是否適用於鼠標? – Francisc 2012-01-10 14:42:37

+1

@Francisc是... – 2012-01-10 14:48:52

+0

謝謝你,32bitkid。 – Francisc 2012-01-10 17:12:39