Flash: addEventListener не обнаруживает события вставки в текстовых полях ввода.

Я новичок во Flash и не могу выполнить это простое действие.

(Я использую ActionScript 3.0)

Я создал текстовое поле ввода в своем редакторе. Имя экземпляра — «тест». В моем редакторе действий у меня есть это:

import flash.events.Event;
this.test.addEventListener(Event.PASTE, pasteHandler);

function pasteHandler(e:Event)
{
    trace("blaaaaaaaaaagh");
}

Когда я запускаю его, он не обнаруживает никаких событий вставки, независимо от того, делаю ли я Ctrl + V или щелкаю правой кнопкой мыши + вставляю. Если я использую другое событие, например MouseEvent.CLICK, оно отлично его обнаруживает. На самом деле, я не думаю, что какие-либо события Event.XXX (такие как COPY, INIT и т. д.) обнаружены (по крайней мере, из тех, которые я пробовал). Все события MouseEvent и KeyboardEvent работают нормально.

Что я делаю неправильно?


person user107312    schedule 14.05.2009    source источник
comment
возможный дубликат отправить событие вставки в AS3   -  person Markus von Broady    schedule 09.12.2014


Ответы (3)


Объекты TextField не отправляют события очистки, копирования, вырезания, вставки или selectAll. Извините за плохие новости!

Тайлер.

person Tyler Egeto    schedule 14.05.2009
comment
Вы можете расширить его и добавить эту функциональность самостоятельно (вам нужно будет следить за тем, какие клавиши нажаты), но предложение ниже тоже хорошо. - person Tyler Egeto; 15.05.2009

Решение этой проблемы состоит в прослушивании TextEvent.TEXT_INPUT и предотвращении поведения по умолчанию:

textField.addEventListener(TextEvent.TEXT_INPUT, onTextInput );

function onTextInput( e:TextEvent ) : void
{
    // this takes place of PASTE because Event.PASTE is not triggered on a textfield
    var t:TextField = TextField( e.currentTarget );
    t.replaceSelectedText( e.text );
    e.preventDefault();
}
person William Grand    schedule 06.04.2012

Я бы прослушал Event.CHANGE, так как вставка изменит поле.

person Joel Hooks    schedule 14.05.2009
comment
Event.CHANGE не срабатывает, когда вы устанавливаете myField.text = foo. Есть ли альтернативный способ добавить текст в поле, вызывающее событие CHANGE? - person Yevgeny Simkin; 19.01.2012