ActionScript 3是否有某种事件委托系统?

时间:2012-01-10 14:11:21

标签: actionscript-3 event-delegation

我有一个包含许多图像的容器。我不想在每个图像上添加点击和其他鼠标事件的监听器,而只想在图像的父级上监听这些事件。

这可能吗?

2 个答案:

答案 0 :(得分: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 
}

答案 1 :(得分: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参数结合使用,以将事件附加到事件的捕获端而不是冒泡端。并且还可以在Event上使用.stopPropagation()方法来阻止任何其他事件处理程序的触发......

但很难说如果你不需要了解更多关于你想要做什么就需要使用那些。但希望这会给你一个正确的方向。