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 关键处理程序(ctrl alt组合)