事件侦听器让一个对象(称作侦听器对象)接收由其它对象(称作广播器对象)生成的事件。广播器对象注册侦听器对象以接收由该广播器生成的事件。例如,您可以注册影片剪辑对象以从舞台接收 onResize
通知,或者按钮实例可以从文本字段对象接收 onChanged
通知。您可以注册多个侦听器对象以从一个广播器接收事件,也可以注册一个侦听器对象以从多个广播器接收事件。
事件侦听器的事件模型类似于事件处理函数的事件模型(请参见使用事件处理函数方法),但有两个主要差别:
addListener()
,该方法将注册侦听器对象以接收其事件。 要使用事件侦听器,您用具有该广播器对象生成的事件名称的属性创建侦听器对象。然后,将一个函数分配给该事件侦听器(以某种方式响应该事件)。最后,您在正广播该事件的对象上调用 addListener()
,向它传递侦听器对象的名称。以下代码概要介绍了事件侦听器模型。
listenerObject
.eventName
= function(){ // 此处是您的代码 };broadcastObject
.addListener(listenerObject
);
指定的侦听器对象可以是任何对象,例如舞台上的影片剪辑或按钮实例,或者可以是任何动作脚本类的实例。事件名称是在 broadCastObject
上发生的事件,然后将该事件广播到listenerObject
。可以向一个事件广播器注册多个侦听器。
以下示例显示如何使用 Selection.onSetFocus
事件侦听器为输入文本字段组创建简单焦点管理器。在这个例子中,启用(显示)获得键盘焦点的文本字段的边框,并禁用失去焦点的文本字段的边框。
确保为该文本字段未选择“在文本周围显示边框”选项。根据需要继续创建输入文本字段。
var focusListener = new Object(); focusListener.onSetFocus = function(oldFocus_txt, newFocus_txt) { oldFocus_txt.border = false; newFocus_txt.border = true; }
此代码创建名为 focusListener
的新的(通用)动作脚本对象。该对象为其本身定义onSetFocus
属性,并为该属性分配一个函数。该函数采用两个参数:对失去焦点的文本字段的引用和对获得焦点的文本字段的引用。该函数将失去焦点的文本字段的 border
属性设置为 false
,将获得焦点的文本字段的 border
属性设置为 true
。
focusListener
对象以从 Selection 对象接收事件,请向“动作”面板添加以下代码:
Selection.addListener(focusListener);
若要注销侦听器对象以使其不再接收事件,可调用广播器对象的 removeListener()
方法,向它传递侦听器对象的名称。
broadcastObject
.removeListener(listenerObject
);
事件侦听器可用于以下动作脚本类的对象:Key、Mouse、MovieClipLoader、Selection、TextField 和 Stage。有关可用于各个类的事件侦听器的列表,请参见动作脚本字典概述中这些类的相应条目。