9
votes

Attraper la touche Entrée Appuyez sur le champ de texte d'entrée dans AS3

Je veux attraper la touche Entrée Appuyez sur lorsque l'utilisateur remplisse un champ de texte d'entrée dans AS3. Je pense que je dois faire quelque chose comme ceci: xxx pré>

mais je ne trouve pas le meilleur moyen de le faire. Au fait, le texte d'entrée a une restriction: p> xxx pré>

dois-je ajouter la touche Entrée aux restrictions? P>

inputText.restrict = "0-9\n";


0 commentaires

3 Réponses :


0
votes

Utilisez-vous un champ de texte ou un textinput?

Le TextInput envoie un événement Entrée, lorsque l'entrée est enfoncée. Plus sur ceci peut être trouvé sur http: / /Livedocs.Adobe.com/flash/9.0/actionscriptLangRefV3/fl/Controls/textInput.html#event.enter

Je ne sais pas comment cela fonctionne pour un champ de texte.


1 commentaires

J'utilise l'outil de texte, puis je définit que la case est un texte d'entrée. J'ai essayé d'utiliser INPUTTEXT.Enter = fonction (E: objet) {bla}, mais il jette une erreur # 1056: impossible de créer une propriété Entrée dans flash.text.textfield. Merci.



33
votes

Réponse corrigée forte>

Vous pouvez facilement écouter les événements de clavier survenant lorsque le champ de texte est axé sur le champ de texte. P>

Ajoutez simplement un événement Key_Down directement au Textfield, puis faites quoi que ce soit Vous voulez. p> xxx pré>

sur une note distincte, les champs de texte envoient également d'autres événements utiles: p>

  • Lorsqu'il est modifié par l'utilisateur (si son fichier de texte d'entrée) - événement.change li>
  • Lorsque le texte est saisi par l'utilisateur (si son texte de texte d'entrée) - textevent.text_input li>
  • Lorsqu'un lien est cliqué sur un lien (si son texte HTML) - textevent.link li>
  • Lorsqu'il est défilé par l'utilisateur (si sa multiline et le contenu ne correspondent pas) - Event.scroll Li> ul>

    mauvaise réponse précédente: strong> p>

    Je pense que la seule façon de faire en réalité ce que vous voulez, c'est un peu complexe. P> Fondamentalement, vous ne pouvez pas obtenir d'événement à partir du champ de texte habituel qui serait viré lorsque la touche Entrée est enfoncée. Vous devez faire du travail autour ... P>

    Une idée serait d'écouter le texte de texte pour des événements de mise au point. Lorsqu'il s'agit de mettre l'accent, vous ajoutez un auditeur à la scène pour les événements de la carte des clés et vérifiez si la touche enfoncée est entrée, si vous allumez votre action, sinon sautez. P>

    échantillon code: p>

    inputText.addEventListener(FocusEvent.FOCUS_IN,textInputHandler);
    inputText.addEventListener(FocusEvent.FOCUS_OUT,textInputHandlerOut);
    
    function textInputHandler(event:FocusEvent):void {
        //our textfield has focus, we want to listen for keyboard events.
        stage.addEventListener( KeyboardEvent.KEY_DOWN, keyDownHandler);
    }
    
    function textInputHandlerOut(event:FocusEvent):void {
        //our textfield lost focus, remove our listener.
        stage.removeEventListener( KeyboardEvent.KEY_DOWN, keyDownHandler);
    }
    
    function keyDownHandler( e:KeyboardEvent ):void{
        //a key was pressed, check if it was Enter => charCode 13.
        if( e.charCode == 13 ){
          //ok, enter was pressed. Do your thing.
          trace("We pressed enter, doSomething" )
        }
    }
    


3 commentaires

J'ai utilisé: INPUTTEXT.ADDEVENTLISTENER (KeyboardEvent.Key_Down, Handler); gestionnaire de fonctions (événement: clavierEvent) {if (event.charcode == 13) {Dosomething (); } } Et il fonctionne. Merci.


Veuillez vérifier vos faits avant de publier de tels non-sens, cette question est de plus d'un an et plus de 4000 personnes ont été induites en erreur pour croire que de telles choses simples sont difficiles.


Cela ne fonctionne réellement pas sur l'iPhone avec de l'air, vous devez utiliser un événement. Changement sur Textfield, KeyboaderEvent ne fonctionne pas. De plus, lorsque "retour" est indiqué sur le clavier programmable, le retour du chariot "\ r" n'est pas toujours indiqué par event.changer. Je ne suis pas sûr qu'il y ait un moyen de détecter un retour de chariot de manière fiable et de manière cohérente.



2
votes

Pour ceux qui se demandent comment gérer une touche "Entrée" Appuyez sur avec un champ TextInput plutôt qu'un champ de texte, voici le processus simple:

import fl.events.ComponentEvent

...

myListeningField.addEventListener(ComponentEvent.ENTER, listenerMethod);


function listenerMethod(e:Event):void{
    //DO SOME STUFF
}


0 commentaires