Захват пользовательского ввода из Flex TextInput control: какое событие использовать?
Должен ли я использовать событие change
или textInput
для захвата ввода пользователем элемента управления TextInput? Почему?
Ответы
Ответ 1
textInput
отправляется только тогда, когда пользователь вводит текст в элемент управления. change
, с другой стороны, отправляется при каждом изменении, совершенном пользователем. Например, если пользователь удаляет часть текста, отправляется только событие change
.
Ни один из них не отправляется, когда текст изменяется с помощью кода:
flash.events.TextEvent.TEXT_INPUT
:
"Отправляется, когда пользователь создает, удаляет или вставляет текст в контроль".
(игнорируйте слово "удалить" там - я просто попробовал это, и это событие не отправляется, когда текст удаляется пользователем)
flash.events.Event.CHANGE
:
"Отправляется, когда текст в элементе управления TextInput изменяется через пользователя вход. Это событие не возникает, если вы используете привязку данных или ActionScript код для изменения текста.
Вы также можете использовать событие valueCommit
, которое отправляется, когда пользователь "совершает" изменения (обычно, перемещая фокус из текстового поля), но помните, что это событие также отправляется, когда значение поля изменяется программно.
Ответ 2
Это отличный ответ, hasseg. Если бы у меня было достаточно репутации, я бы проголосовал за нее.
В зависимости от того, для чего вы загружаете вход пользователя, вы можете подклассифицировать компонент TextInput и переопределить внутренние прослушиватели для событий change и textInput.
Я не знаю, есть ли много причин, по которым вы хотели бы это сделать, но недавно я это сделал, чтобы справиться с ошибкой в OS X, которая заставляет вставляемые линейные строки быть представленными как "\ r", вместо этого '\n'.
Все, что вам нужно сделать, это добавить следующее после вызова super() в конструкторе вашего подкласса:
this.addEventListener(Event.CHANGE, textFieldChangeListener);
this.addEventListener(TextEvent.TEXT_INPUT,textFieldInputListener);
Затем добавьте методы прослушивателя и код, который вы хотите выполнить.
Ответ 3
Оба события Event.CHANGE и TextEvent.TEXT_INPUT запускаются для каждого символа. Если вы хотите событие, которое будет запускать только одно время для заданного поля TextInput, используйте FocusEvent.FOCUS_OUT.
Подобно Event.CHANGE и TextEvent.TEXT_INPUT, это событие будет запускаться только для ввода пользователем, а не для программных изменений значения.
Ответ 4
CHANGE
не сообщает вам, что изменилось - TEXT_INPUT
и KEY_DOWN
do.