Captura da entrada do usuário de controle Flex TextInput: qual evento de usar?
-
08-07-2019 - |
Pergunta
Devo usar o change
ou evento textInput
à entrada do usuário captura em um controle TextInput? Por quê?
Solução
textInput
só é despachado quando o usuário tem de entrada texto no controle. change
, por outro lado, é enviado a cada mudança cometida pelo usuário. Assim, por exemplo, se o usuário exclui uma parte do texto, somente o evento change
é despachado.
Nenhum destes é despachado quando o texto é modificado por meio de código:
flash.events.TextEvent.TEXT_INPUT
:
"Despachado quando o o usuário tipos, exclui ou cola texto no controlar ".
(ignorar a palavra "eliminar" lá - eu apenas tentei e este evento é não despachado quando texto é excluído pelo usuário)
"Despachado quando o texto nas mudanças de controle TextInput por meio de usuário entrada. Este evento não ocorre se você usa a ligação de dados ou ActionScript código para alterar o texto ".
Você também pode usar o valueCommit
evento, que é despachado quando os "commits" usuário as mudanças (geralmente movendo o foco longe do campo de texto), mas lembre-se que este evento também é despachado quando o valor do campo é alterado de forma programática.
Outras dicas
Isso é uma grande resposta, hasseg. Se eu tivesse rep suficiente, eu up-voto-lo.
Dependendo do que você está capturando a entrada do usuário para, você poderia subclasse o componente TextInput e substituir os ouvintes internos para a mudança e eventos textInput.
Eu não sei se há uma série de razões que você gostaria de fazer isso, mas eu fiz isso recentemente para lidar com um bug no OS X que causa quebras de linha colado a ser representado como '\ r', em vez de '\ n'.
Tudo que você precisa fazer é adicionar a chamada seguinte após a sua super () no construtor do seu objeto de subclasse:
this.addEventListener(Event.CHANGE, textFieldChangeListener);
this.addEventListener(TextEvent.TEXT_INPUT,textFieldInputListener);
E, em seguida, adicionar os métodos do ouvinte e o código que você deseja executar.
Ambos Event.CHANGE e TextEvent.TEXT_INPUT eventos gatilho em cada caractere digitado. Se você quer um evento que só irá desencadear uma única vez para um determinado campo TextInput, uso FocusEvent.FOCUS_OUT .
Como Event.CHANGE e TextEvent.TEXT_INPUT, este evento só vai gatilho para a entrada do usuário, e não para mudanças programáticas para o valor.
CHANGE
não lhe diz o mudou completamente -. TEXT_INPUT
e KEY_DOWN
fazer