Recipe 9.23. Responding When Text Is Selected or Deselected


Problem

You want to perform a task when a text field is selected or deselected.

Solution

Listen for the focusIn and focusOut events.

Discussion

Text fields dispatch focusIn events when focus is shifted to the field and they dispatch focusOut events when focus is shifted away from the field. The events dispatched in both cases are flash.events.FocusEvent objects. The FocusEvent class defines a relatedObject property. In the case of focusIn events, the relatedObject property is a reference to the object that just had focus. In the case of focusOut events, the relatedObject property is a reference to the object that just received focus. Use the flash.events.FocusEvent constants of FOCUS_IN and FOCUS_OUT when registering listeners:

field.addEventListener(FocusEvent.FOCUS_IN, onFocus);

The focusIn and focusOut events both occur after the focus has already changed. They are non-cancelable events. If you want to be able to cancel the events, you must listen for events that occur before focusIn and focusOut are dispatched. The keyFocusChange and mouseFocusChange events are cancelable events that occur when the user attempts to move focus from a text field by way of the keyboard or mouse, respectively. You can register listeners by using the FocusEvent constants of KEY_FOCUS_CHANGE and MOUSE_FOCUS_CHANGE. Use the FocusEvent.preventDefault( ) method to cancel the default behavior. The following example disallows using the Tab key to move from field1 to field2 if field1 doesn't have any text:

package {   import flash.display.Sprite;   import flash.text.TextField;   import flash.text.TextFieldType;   import flash.events.FocusEvent;      public class Text extends Sprite {     private var _field1:TextField;     private var _field2:TextField;     public function Text(  ) {       _field1 = new TextField(  );       _field1.border = true;       _field1.background = true;       _field1.type = TextFieldType.INPUT;       addChild(_field1);       _field1.addEventListener(FocusEvent.KEY_FOCUS_CHANGE, onKeyFocus);       _field2 = new TextField(  );       _field2.border = true;       _field2.background = true;       _field2.type = TextFieldType.INPUT;       addChild(_field2);       _field2.y = 100;            }          private function onKeyFocus(event:FocusEvent):void {       if(_field1.text == "") {           event.preventDefault(  );       }     }        } }




ActionScript 3. 0 Cookbook
ActionScript 3.0 Cookbook: Solutions for Flash Platform and Flex Application Developers
ISBN: 0596526954
EAN: 2147483647
Year: 2007
Pages: 351

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net