e.target可以用于按钮

时间:2010-10-22 08:27:43

标签: flex actionscript flex4

我没有使用MouseEvent分配给每个按钮,而是使用以下命令分配给AIR应用程序:

private function init():void {
  this.addEventListener(MouseEvent.MOUSE_DOWN,mpressKey);
}

但是,如果它检测到“button”属性而不是Demo0.WindowedApplicationSkin2.Group3.contentGroup.g4(g4是id),我只希望执行mouse_down。

2 个答案:

答案 0 :(得分:2)

不要依赖event.target检查按钮是否被点击。 target属性设置为单击的最内层项。当您单击按钮时,您并不总是单击按钮;您可能会单击显示标签的文本字段,或者背景图像(如果有)或其他一些子蒙皮部件等 - target将设置为此内部项目。

如果您希望为所有按钮设置单击处理程序并根据单击的按钮采取适当的操作,则可以为每个按钮分配与处理程序相同的功能,并检查event.currentTarget属性;调用事件处理程序时,currentTarget设置为该处理程序注册的对象。

btn1.addEventListener(MouseEvent.CLICK, clickHandler);
btn2.addEventListener(MouseEvent.CLICK, clickHandler);
btn3.addEventListener(MouseEvent.CLICK, clickHandler);

public function clickHandler(e:MouseEvent):void
{
  if(e.currentTarget == btn1){
    /* Handle btn1 here */
  }
  else if(e.currentTarget == btn2){
    /* Handle btn1 here */
  }
  else if(e.currentTarget == btn3){
    /* Handle btn1 here */
  }
}

当您使用airApp.addEventListener添加单个鼠标处理程序时,currentTarget将始终是您的airApp,因此您无法将其用作单个函数来处理它们

答案 1 :(得分:1)

您是否在询问如何测试目标是按钮还是特定按钮?

如果是按钮

if ( e.target is Button ) { ... }

或者如果是特定按钮

if ( e.target == myButton ) { ... }