La capture de la saisie de l'utilisateur de Flex contrôle TextInput: auquel cas l'utiliser?
Dois-je utiliser le change
ou textInput
événement pour capturer la saisie de l'utilisateur sur un contrôle TextInput? Pourquoi?
OriginalL'auteur Niko Nyman | 2008-11-12
Vous devez vous connecter pour publier un commentaire.
textInput
est distribué uniquement lorsque l'utilisateur a entrée du texte dans le contrôle.modifier
, d'autre part, est distribué à chaque changement engagé par l'utilisateur. Ainsi, par exemple, si l'utilisateur supprime une partie du texte, seule lachange
événement est distribué.N'est pas distribué lorsque le texte est modifié via le code:
flash.les événements.TextEvent.TEXT_INPUT
:(ignorer le mot "supprimer", je l'ai juste essayé et cet événement est pas distribué lorsque le texte est supprimé par l'utilisateur)
flash.les événements.De l'événement.MODIFIER
:Vous pouvez également utiliser le
valueCommit
événement, qui est distribué lorsque l'utilisateur "s'engage" les changements (en général, par le déplacement de l'accent mis sur le champ de texte), mais n'oubliez pas que cet événement est également distribué lorsque la valeur du champ est modifiée par programmation.text
propriété dans le gestionnaire d'événement pourtextInput
événement (à l'aide deevent.currentTarget.text
), la valeur-je obtenir reflète la valeur detext
avant la pression de touche qui a déclenché l'événement.Ce n'est pas vrai pour moi, du moins pas dans Flex 4.5 (je suppose Flex 4 trop) à l'aide d'étincelle TextInput. Je reçois la dernière valeur de texte dans l'événement de changement, il y a aussi l'évolution de l'événement distribué avant.
OriginalL'auteur hasseg
C'est une grande réponse, hasseg. Si j'avais assez de rep, j'avais jusqu'-vote.
En fonction de ce que vous êtes à la capture de l'entrée de l'utilisateur, vous pouvez créer des sous-classes composant TextInput et de remplacer les auditeurs internes pour le changement et textInput événements.
Je ne sais pas si il y a beaucoup de raisons pour lesquelles vous voulez le faire, mais je l'ai fait récemment pour faire face à un bug dans OS X qui provoque collé retours à la ligne (pour être représenté comme '\r', au lieu de '\n'.
Tout ce que vous devez faire est d'ajouter ce qui suit après votre appel super() dans le constructeur de votre sous-classé objet:
Puis ajouter les méthodes d'écoute et le code que vous voulez exécuter.
OriginalL'auteur Ross Henderson
Les Deux Cas.CHANGEMENT et TextEvent.TEXT_INPUT événements de déclenchement sur chaque caractère tapé. Si vous voulez un événement qui va déclencher une seule fois pour un composant TextInput, utilisez FocusEvent.FOCUS_OUT.
Comme Événement.CHANGEMENT et TextEvent.TEXT_INPUT, cet événement va déclencher une entrée de l'utilisateur, pas pour la programmation des changements de la valeur.
Donc, il semble, comme hasseg notes ci-dessus, que le CHANGEMENT est le meilleur choix pour écouter de modifications apportées par l'utilisateur d'un composant TextInput. Toutefois, si l'utilisateur tape ctrl-C pour copier la valeur d'un champ, ce sera également déclencher un événement de CHANGEMENT.
OriginalL'auteur hrabinowitz
CHANGE
ne marche pas vous dire ce a changé -TEXT_INPUT
etKEY_DOWN
faire.OriginalL'auteur Daniel Z