使用事件侦听器

事件侦听器让一个对象(称作侦听器对象)接收由其它对象(称作广播器对象)生成的事件。广播器对象注册侦听器对象以接收由该广播器生成的事件。例如,您可以注册影片剪辑对象以从舞台接收 onResize 通知,或者按钮实例可以从文本字段对象接收 onChanged 通知。您可以注册多个侦听器对象以从一个广播器接收事件,也可以注册一个侦听器对象以从多个广播器接收事件。

事件侦听器的事件模型类似于事件处理函数的事件模型(请参见使用事件处理函数方法),但有两个主要差别:

要使用事件侦听器,您用具有该广播器对象生成的事件名称的属性创建侦听器对象。然后,将一个函数分配给该事件侦听器(以某种方式响应该事件)。最后,您在正广播该事件的对象上调用 addListener(),向它传递侦听器对象的名称。以下代码概要介绍了事件侦听器模型。

listenerObject.eventName = function(){
  // 此处是您的代码
};
broadcastObject.addListener(listenerObject);

指定的侦听器对象可以是任何对象,例如舞台上的影片剪辑或按钮实例,或者可以是任何动作脚本类的实例。事件名称是在 broadCastObject 上发生的事件,然后将该事件广播到
listenerObject。可以向一个事件广播器注册多个侦听器。

以下示例显示如何使用 Selection.onSetFocus 事件侦听器为输入文本字段组创建简单焦点管理器。在这个例子中,启用(显示)获得键盘焦点的文本字段的边框,并禁用失去焦点的文本字段的边框。

使用事件侦听器创建简单焦点管理器:

  1. 使用文本工具在舞台上创建一个文本字段。
  2. 选择该文本字段,接着在属性检查器的“文本类型”弹出菜单中选择“输入”,然后选择“在文本周围显示边框”选项。
  3. 在第一个文本字段下创建另一个输入文本字段。

    确保为该文本字段未选择“在文本周围显示边框”选项。根据需要继续创建输入文本字段。

  4. 在“时间轴”中选择“第 1 帧”,然后打开“动作”面板(“窗口”>“开发面板”>“动作”)。
  5. 要从 Selection 类创建侦听焦点通知的对象,请在“动作”面板中输入以下代码:
    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

  6. 要注册 focusListener 对象以从 Selection 对象接收事件,请向“动作”面板添加以下代码:
    Selection.addListener(focusListener);
    
  7. 测试影片(“控制”>“测试影片”),在第一个文本字段中单击,然后按下 Tab 键在各字段之间切换焦点。

若要注销侦听器对象以使其不再接收事件,可调用广播器对象的 removeListener() 方法,向它传递侦听器对象的名称。

broadcastObject.removeListener(listenerObject);

事件侦听器可用于以下动作脚本类的对象:Key、Mouse、MovieClipLoader、Selection、TextField 和 Stage。有关可用于各个类的事件侦听器的列表,请参见动作脚本字典概述中这些类的相应条目。