View comments | RSS feed

Using event handler methods

An event handler method is a method of a class that is invoked when an event occurs on an instance of that class. For example, the MovieClip class defines an onPress event handler that is invoked whenever the mouse is pressed on a movie clip object. Unlike other methods of a class, however, you don't invoke an event handler directly; Flash Player invokes it automatically when the appropriate event occurs.

The following ActionScript classes define event handlers: "Button class", "ContextMenu class", "ContextMenuItem class", "Key class", "LoadVars class", "LocalConnection class", "Mouse class", "MovieClip class", "MovieClipLoader class", "Selection class", "SharedObject class", "Sound class", "Stage class", "TextField class", "XML class", and "XMLSocket class". For more information about the event handlers they provide, see each class entry in Flash ActionScript Language Reference.

By default, event handler methods are undefined: when a particular event occurs, its corresponding event handler is invoked, but your application doesn't respond further to the event. To have your application respond to the event, you define a function with the function statement and then assign that function to the appropriate event handler. The function you assign to the event handler is then automatically invoked whenever the event occurs.

An event handler consists of three parts: the object to which the event applies, the name of the object's event handler method, and the function you assign to the event handler. The following example shows the basic structure of an event handler:

object.eventMethod = function () {
   // Your code here, responding to event
}

For example, suppose you have a button named next_btn on the Stage. The following code assigns a function to the button's onPress event handler; this function advances the playhead to the next frame in the Timeline:

next_btn.onPress = function () {
   nextFrame();
}

Assigning a function reference In the previous code, the nextFrame() function is assigned directly to onPress. You can also assign a function reference (name) to an event handler method and later define the function, as shown in the following example:

// Assign a function reference to button's onPress event handler method
next_btn.onPress = goNextFrame;

// Define goNextFrame() function
function goNextFrame() {
   nextFrame();
}

Notice in the following example that you assign the function reference, not the function's return value, to the onPress event handler:

// Incorrect!
next_btn.onPress = goNextFrame();
// Correct.
next_btn.onPress = goNextFrame;

Receiving passed parameters Some event handlers receive passed parameters that provide information about the event that occurred. For example, the TextField.onSetFocus event handler is invoked when a text field instance gains keyboard focus. This event handler receives a reference to the text field object that previously had keyboard focus.

For example, the following code inserts some text into a text field that no longer has keyboard focus:

this.createTextField("my_txt", 99, 10, 10, 200, 20);
my_txt.border = true;
my_txt.type = "input";
this.createTextField("myOther_txt", 100, 10, 50, 200, 20);
myOther_txt.border = true;
myOther_txt.type = "input";
myOther_txt.onSetFocus = function(my_txt:TextField) {
   my_txt.text = "I just lost keyboard focus";
};

Event handlers for runtime objects You can also assign functions to event handlers for objects you create at runtime. For example, the following code creates a new movie clip instance (newclip_mc) and then assigns a function to the clip's onPress event handler:

this.attachMovie("symbolID", "newclip_mc", 10);
newclip_mc.onPress = function () {
   trace("You pressed me");
} 

For more information, see Creating movie clips at runtime.

Overriding event handler methods By creating a class that extends an ActionScript 2.0 class, you can override event handler methods with the functions that you write. You can define an event handler in a new subclass that you can then reuse for various objects by linking any symbol in the library of the extended class to the new subclass. The following code overrides the MovieClip class onPress event handler with a function that increases the transparency of the movie clip:

// FadeColor class -- fades color when movie clip is clicked
class FadeColor extends MovieClip {
  function onPress() {
    this._alpha = 30;
  }
}

For specific instructions on extending an ActionScript 2.0 class and linking to a symbol in the library, see the examples in Assigning a class to a movie clip symbol.


Comments


DaCeige said on Jul 8, 2005 at 1:42 AM :
How do you unset event handlers?
DaCeige said on Jul 8, 2005 at 1:42 AM :
How do you unset event handlers?
No screen name said on Sep 20, 2005 at 3:17 PM :
if i remember correctly, simply set it to 'null' or 'undefined':

my_mc.onPress = null;
No screen name said on May 31, 2006 at 9:39 AM :
The propper way to delate an event is using the delete operator.
Example:

delete _root.onEnterFrame

 

RSS feed | Send me an e-mail when comments are added to this page | Comment Report

Current page: http://livedocs.adobe.com/flash/mx2004/main_7_2/00000944.html