Захват пользовательского ввода из элемента управления Flex TextInput: какое событие использовать? - PullRequest
15 голосов
/ 12 ноября 2008

Следует ли использовать событие change или textInput для захвата ввода пользователя в элемент управления TextInput? Почему?

Ответы [ 4 ]

46 голосов
/ 12 ноября 2008

textInput отправляется только тогда, когда пользователь имеет ввод текста в элемент управления. change, с другой стороны, отправляется при каждом изменении, совершенном пользователем. Например, если пользователь удаляет часть текста, отправляется только событие change.

Ни один из них не отправляется, когда текст изменяется с помощью кода:

flash.events.TextEvent.TEXT_INPUT

"Отправляется, когда пользователь вводит, удаляет или вставляет текст в контроль ".

(игнорируйте слово "удалить" - я только что попробовал, и это событие не отправляется, когда текст удаляется пользователем)

flash.events.Event.CHANGE

"Отправляется, когда текст в элементе управления TextInput изменяется через пользователя вход. Это событие не происходит, если вы используете привязку данных или ActionScript код для изменения текста . "

Вы также можете использовать событие valueCommit, которое отправляется, когда пользователь «фиксирует» изменения (обычно путем перемещения фокуса от текстового поля), но помните, что это событие также отправляется, когда значение поля изменяется программно.

3 голосов
/ 21 ноября 2008

Отличный ответ, Хассег. Если бы у меня было достаточно представителя, я бы проголосовал за него.

В зависимости от того, для чего вы вводите пользовательский ввод, вы можете создать подкласс компонента TextInput и переопределить внутренние прослушиватели для событий change и textInput.

Я не знаю, есть ли много причин, по которым вы хотели бы сделать это, но я сделал это недавно, чтобы устранить ошибку в OS X, из-за которой вставленные разрывы строк представляются как '\ r', вместо этого из \ n

Все, что вам нужно сделать, это добавить следующее после вызова super () в конструкторе вашего подкласса:

this.addEventListener(Event.CHANGE, textFieldChangeListener);   
this.addEventListener(TextEvent.TEXT_INPUT,textFieldInputListener);

А затем добавьте методы слушателя и код, который вы хотите выполнить.

0 голосов
/ 04 января 2012

CHANGE не говорит вам что изменилось - TEXT_INPUT и KEY_DOWN делают.

0 голосов
/ 20 мая 2011

Оба события Event.CHANGE и TextEvent.TEXT_INPUT срабатывают для каждого набранного символа. Если вы хотите событие, которое будет запускаться только один раз для данного поля TextInput, используйте FocusEvent.FOCUS_OUT .

Как и Event.CHANGE и TextEvent.TEXT_INPUT, это событие будет срабатывать только для пользовательского ввода, а не для программных изменений значения.

...