ActionScript 3 - 作为单击处理程序的匿名函数在每次单击时被多次调用

Posted

技术标签:

【中文标题】ActionScript 3 - 作为单击处理程序的匿名函数在每次单击时被多次调用【英文标题】:ActionScript 3 - anonymous function as click handler is called multiple times per click 【发布时间】:2011-03-30 14:42:30 【问题描述】:

我有一个标记为“blueButton”的按钮,我想使用匿名函数来处理点击,如下所示:

blueButton.addEventListener(MouseEvent.CLICK, function(event:MouseEvent):void 
 trace( "-----click detected-----" );
 // now do other stuff
);

问题是,每次点击都会多次调用点击处理程序。调用的次数似乎是随机的(有时 2,有时 4,有时 3 等)。我的代码中是否遗漏了某些内容,或者我设置的按钮有误?

我还注意到它似乎总是在第一次点击时被调用一次。在第一次点击之后,它开始被调用更多次,也许这与它有关?

提前感谢您的帮助

【问题讨论】:

【参考方案1】:

从哪里调用 blueButton.addEventListener? 该行可能被多次调用,然后可能会添加多个侦听器,特别是如果它是在某些视图状态 onShow 代码之后添加的。 尝试在 blueButton.addEventListener 上方添加 trace("---- 添加事件侦听器 ----" ) 并确保仅显示一次。

另外,您是否尝试过只在其中包含 trace() 语句的代码?那还是有问题吗? 您可以通过删除事件侦听器中的所有其他代码来拆分差异。 “其他东西”可能会触发代码运行以再次添加按钮事件侦听器。

【讨论】:

【参考方案2】:

我会尝试做两件事来解决这个问题:

1) 确保设置 blueButton.mouseChildren = false。在某些鼠标事件中,如果指定的 DisplayObject 内部有其他 DisplayObject 子级,flash 将为每个子级调度鼠标事件。

2) 不要使用匿名函数,因为当您偶尔使用它们时,Flash 的行为会有些奇怪。我以前遇到过和你一样的问题,一旦我停止使用匿名函数,问题就消失了。

【讨论】:

【参考方案3】:

你也可以试试

event.stopImmediatePropagation;

【讨论】:

以上是关于ActionScript 3 - 作为单击处理程序的匿名函数在每次单击时被多次调用的主要内容,如果未能解决你的问题,请参考以下文章

使用 MXML 或 actionscript 单击按钮添加文本字段

使用actionscript 3的触摸事件与鼠标单击事件

ActionScript 3 关键处理程序(ctrl alt组合)

使用ActionScript 3单击标记

Flash ActionScript 3.0 按钮单击全局 MouseEvent.CLICK

ActionScript 3.0 当你单击一个对象时,我如何使它进入下一个场景?