Руководство по actionscript. часть 2, стр. 046
Предположим, объект Sprite, содержащий объект TextField, зарегистрировал приемник события clickListener ( ) для события MouseEvent. CLICK. Когда пользователь щелкает кнопкой мыши в этом текстовом поле, происходит диспетчеризация события MouseEvent. CLICK, в результате чего вызывается приемник clickListener ( ). Внутри метода clickListener ( ) переменная currentTarget ссылается на объект Sprite, а переменная target — на объект TextField.
Программы обычно используют переменную currentTarget для управления объектом, в котором зарегистрирован приемник. В качестве примера модифицируем функцию f ocusInListener ( ) из листинга 12.3. На этот раз при получении объектом TextField фокуса ввода наш новый код функции focusInListener ( ) будет отображать синий овал вокруг текстового поля. Синий овал рисуется на объекте Sprite, доступ к которому осуществляется через переменную currentTarget.
public function focusInListener (e:FocusEvent):void { // Установить для фона текстового поля красный цвет TextField(e. target).backgroundColor = OxFFOOOO;
// Получить ссылку на объект Sprite
var theSprite:Sprite = Sprite(e. currentTarget);
// Нарисовать эллипс на объекте Sprite theSpri te. graphi cs. begi nFi11(OxOOOOFF): theSprite. graphics. drawEl1ipse(-10. -10. 75. 40):
Отмена стандартного поведения событий
Некоторые события в языке ActionScript обладают побочным эффектом, называемым стандартным поведением. Например, стандартным поведением события TextEvent. TEXT_INPUT является добавление текста в текстовое поле получателя. Подобным образом стандартным поведением события MouseEvent. MOUSE_DOWN, получаемого объектом класса SimpleButton, является отображение картинки, которая представляет нажатое состояние кнопки.
В некоторых случаях события, которые характеризуются стандартным поведением, предоставляют возможность избежать этого поведения программным путем. Такие события называются отменяемыми. Например, отменяемыми являются события TextEvent. TEXT_INPUT, FocusEvent. KEY_FOCUS_CHANGE и FocusEvent. MOUSE_FOCUS_CHANGE.
Чтобы избежать стандартного поведения для отменяемого события, мы вызываем метод 3K3eMR7mpapreventDef ault ( ) класса Event над объектом этого класса, передаваемым во все приемники, зарегистрированные для данного события. Например, в следующем коде мы отменяем стандартное поведение для всех событий TextEvent. TEXT_INPUT, получателем которых является текстовое поле t. Вместо того чтобы позволить программе отображать в текстовом поле текст, вводимый пользователем, мы будем просто добавлять в это поле букву «х».
package { import flash. display.*; import flash. text.*; import flash. events.*;
// Изменить текст, вводимый пользователем, на символ «х» public class InputConverter extends Sprite { private var t:TextField;
public function InputConverter ( ) { // Создаем текстовое поле t = new TextField( ); t. border = true; t. background = true; t. type = TextFieldType. INPUT addChild(t);
// Регистрируем приемник для события TextEvent. TEXT_INPUT t. addEventListener(TextEvent. TEXT_INPUT, textInputListener);
}
// Приемник выполняется при возникновении события TextEvent. TEXT_INPUT private function textInputListener (e:TextEvent):void {
// Показать текст, введенный пользователем
trace(«Attempted text input: » + e. text);
// Исключить отображение введенного текста в текстовом поле e. preventDefault( );
// Добавить в текстовое поле букву «х» вместо введенного // пользователем текста t. appendTextCx»);
Чтобы определить, обладает ли определенное событие стандартным поведением, которое можно отменить, проверьте значение переменной экземпляра cancelable класса Event внутри приемника, зарегистрированного для получения уведомлений о возникновении данного события. Для предопределенных событий эту информацию можно также найти в разделе описания соответствующего события в справочнике по языку ActionScript корпорации Adobe.