【问题标题】:Actionscript 3.0 Determining Event Listener Sender?Actionscript 3.0 确定事件侦听器发送者?
【发布时间】:2010-02-19 22:28:07
【问题描述】:

是否可以根据事件侦听器确定哪个对象调用函数?例如,我在舞台上有 2 个按钮,当它们被点击时会调用相同的功能。我想要确定哪个按钮是发件人的功能。

firstButton.addEventListener(MouseEvent.CLICK, myFunction);
secondButton.addEventListener(MouseEvent.CLICK, myFunction);

function myFunction(e:MouseEvent):void
 {
 var myString:String = "The button that called this function was (??)";
 trace(myString);
 }

【问题讨论】:

    标签: actionscript-3 event-handling sender


    【解决方案1】:

    使用Event 类中的属性currentTarget

    function myFunction(e:MouseEvent):void {
     var myString:String = "The button that called this function was "+e.currentTarget;
     trace(myString);
    }
    

    【讨论】:

    • 当您希望原始发件人target 更好时,如果事件正在冒泡,currentTarget 将是您捕获它时的任何事件。
    【解决方案2】:

    在 myfunction 中,e.currentTarget 应该包含对发送事件的按钮的引用。

    【讨论】:

      【解决方案3】:

      我只想补充一点:在函数中获得的事件对象中,有两个属性有时会让人混淆以区分它们:

      e.target - 目标将始终将事件的原始调度程序返回给您,因此如果您单击一个按钮,但在监听父级的位置,您的目标仍然是按钮。

      e.currentTarget - currentTarget 返回您从事件或 adobes 语言中询问的对象“正在使用事件侦听器主动处理 Event 对象的对象。”。

      因此您的 currentTarget 和 target 可以产生不同的结果,您需要牢记这一点。 p.s.如果您的事件没有冒泡(非可视/非用户交互鼠标事件),那么您的 currentTarget 和目标将是相同的,或者如果您在冒泡事件的情况下询问调度事件的对象。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-03
        • 1970-01-01
        • 2020-09-06
        • 2022-06-18
        • 1970-01-01
        • 1970-01-01
        • 2015-12-18
        相关资源
        最近更新 更多