AS3:在不知道数量或名称的情况下删除EventListeners

时间:2010-04-28 18:29:26

标签: flash actionscript-3 event-listener

首先简要介绍一下我的网站是如何运作的: 单击链接时,它会检查屏幕的左侧或右侧是否已显示某些内容(该网站看起来像一本书,所以我有一个左页面,我想显示信息和右侧页面)。如果已经显示某些内容,则隐藏它并显示新对象,同时启用该对象中的所有按钮(我有单独的功能来设置每个对象)。

此类EventListener的一个示例是:

pathTo.Button1.addEventListener(MouseEvent.CLICK, function():void {showText(side, object)});

我要做的是删除所有以前设置的EventListeners,而不必创建单独的函数来删除每个对象内的链接。

更短的版本:如何删除另一个对象中所有对象的所有EventListener?我想要存储的唯一变量是包含所有内容的对象。但是,对象中并不总是有EventListeners。

3 个答案:

答案 0 :(得分:3)

您可以使用

检查现有的事件监听器
hasEventListener(Event.TYPE)

您可以使用

删除事件侦听器
removeEventListener(Event.TYPE, listenerFunc)

请注意,您必须引用listenerFunc以删除事件侦听器。

答案 1 :(得分:1)

您可以在Flex框架上进行一些猴子修补以包含该功能。

Doug McCune在this blog entry中介绍了如何执行此操作。

编辑:误读了你的问题。如上所述,这仅适用于Flex组件。不确定是否可以对通用Flash组件使用相同的方法。遗憾。

答案 2 :(得分:1)

是的,这是可能的,解决方案就在这里:http://blog.andregil.net/2010/01/how-to-remove-event-listeners-with-parameters-closure/

您可以在侦听器函数上使用此代码段,以使其从自身中删除侦听器:

event.currentTarget.removeEventListener(event.type, arguments.callee);