2010-02-19 8 views
9

Je veux attraper la touche Entrée lorsque l'utilisateur remplit un champ de saisie dans AS3. Je pense que je dois faire quelque chose comme ceci:Catch touche entrée dans le champ de texte de saisie dans AS3

inputText.addEventListener(Event. ? , func); 
    function func(e:Event):void{ 
     if(e. ? == "Enter"){ 
      doSomething(); 
     } 
    } 

Mais je ne peux pas trouver la meilleure façon de le faire. Par ailleurs, le texte d'entrée a une restriction:

inputText.restrict = "0-9"; 

Dois-je ajouter la touche Entrée pour les restrictions?

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

Merci d'avance.

Répondre

34

corrigée Réponse

Vous pouvez facilement écouter les événements de clavier qui se produisent lorsque le champ de texte se concentre.

Ajoutez simplement un événement KEY_DOWN directement au champ de texte, puis faites ce que vous voulez.

// get key presses only when the textfield is being edited 
inputText.addEventListener(KeyboardEvent.KEY_DOWN,handler); 
function handler(event:KeyboardEvent){ 

    // if the key is ENTER 
    if(event.charCode == 13){ 

     // your code here 
     doSomething(); 
    } 
} 

Sur une note séparée, textfields envoient également d'autres événements utiles:

  • Lorsque modifié par l'utilisateur (si son entrée un champ de texte) - Event.CHANGE
  • Lorsque le texte est typée par l'utilisateur (si c'est un textfield d'entrée) - TextEvent.TEXT_INPUT
  • Lorsqu'un lien est cliqué (si son texte HTML) - TextEvent.LINK
  • Lorsque défilée par l'utilisateur (si son multiligne et le contenu n » t fi t) - Event.SCROLL

précédente Mauvaise réponse:

Je pense que la seule façon de faire réellement ce que vous voulez est un peu complexe.

Fondamentalement, vous ne pouvez obtenir aucun événement du TextField normal qui serait déclenché lorsque la touche Entrée est enfoncée. Vous devez faire le travail autour ...

Une idée serait d'écouter le champ de texte pour les événements de mise au point. Quand il a le focus, vous ajoutez un écouteur à la scène pour les événements du tableau de bord et vérifiez si la touche enfoncée est Entrée, si c'est le cas, sinon passez.

Exemple de code:

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") 
    } 
} 
+1

J'ai utilisé: inputText.addEventListener (KeyboardEvent.KEY_DOWN, handler); gestionnaire de fonction (événement: KeyboardEvent) { if (event.charCode == 13) { doSomething(); } } Et cela fonctionne. Merci. –

+0

@Jonathan - J'ai édité la réponse pour refléter la vérité. –

+0

S'il vous plaît vérifier vos faits avant de publier de telles absurdités, cette question a plus d'un an, et plus de 4000 personnes ont été trompés en leur faisant croire que de telles choses simples sont difficiles. –

0

Utilisez-vous un champ de texte ou un TextInput?

Le TextInput distribue un événement Enter, lorsque l'entrée est enfoncée. Plus à ce sujet peut être trouvé à http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/fl/controls/TextInput.html#event:enter

Je ne suis pas sûr de savoir comment cela fonctionne pour un champ de texte.

+0

J'utilise le texte outil, puis je définis que la boîte est un texte d'entrée. J'ai essayé d'utiliser inputText.enter = function (e: Object) {bla} mais il renvoie Erreur # 1056: Impossible de créer la propriété enter dans flash.text.TextField. Merci. –

2

Pour ceux qui se demandent comment gérer une pression de touche "Enter" avec un champ TextInput plutôt que d'un TextField, voici le processus simple:

import fl.events.ComponentEvent 

... 

myListeningField.addEventListener(ComponentEvent.ENTER, listenerMethod); 


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