2010-02-19 14 views
9

Chcę złapać klawisz Enter, gdy użytkownik wypełnia pole wprowadzania tekstu w AS3. Chyba muszę zrobić coś takiego:Złap naciśnięcie klawisza Enter w polu tekstowym wprowadzania AS3

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

Ale nie mogę znaleźć najlepszy sposób, aby to zrobić. Nawiasem mówiąc, tekst wejściowy ma ograniczenie:

inputText.restrict = "0-9"; 

Dodam klawisz enter ograniczeń?

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

Z góry dziękuję.

Odpowiedz

34

Poprawione Odpowiedź

można łatwo słuchać zdarzeń klawiaturowych występujących podczas textfield jest skoncentrowany.

Wystarczy dodać wydarzenie KEY_DOWN bezpośrednio do pola tekstowego, a następnie robić, co chcesz.

// 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(); 
    } 
} 

Na odrębnej notatce Pola tekstowe również wysłać inne użyteczne wydarzenia:

  • Kiedy modyfikowany przez użytkownika (Jeśli jego textField wejście) - Event.CHANGE
  • Kiedy tekst wpisany przez użytkownik (jeśli jego textfield wejście) - TextEvent.TEXT_INPUT
  • po kliknięciu łącza (jeśli jej tekst HTML) - TextEvent.LINK
  • Kiedy przewijane przez użytkownika (jeśli jego treść multiline i don” t fi t) - Event.SCROLL

Poprzedni Błędna odpowiedź:

myślę, że jedynym sposobem, aby rzeczywiście zrobić to, co chcesz, jest nieco skomplikowane.

Zasadniczo nie można uzyskać żadnego zdarzenia ze zwykłego pola TextField, które zostanie uruchomione po naciśnięciu klawisza Enter. Musisz pracować około ...

Jednym z pomysłów byłoby słuchanie pola tekstowego w przypadku fokusowych wydarzeń. Po ustawieniu ostrości dodajesz słuchacza na scenę dla zdarzeń na płycie głównej i sprawdzasz, czy naciśnięty klawisz to Enter, jeśli tak, uruchom akcję, w przeciwnym razie pomiń.

Przykładowy kod:

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

Użyłem: inputText.addEventListener (KeyboardEvent.KEY_DOWN, handler); funkcja obsługi (event: KeyboardEvent) { if (event.charCode == 13) { doSomething(); } } I działa. Dzięki. –

+0

@ Jonathan - Edytowałem odpowiedź, aby odzwierciedlić prawdę. –

+0

Proszę sprawdzić swoje fakty przed publikacją takich bzdur, to pytanie ma ponad rok, a ponad 4000 osób zostało wprowadzonych w błąd, wierząc, że takie proste rzeczy są trudne. –

0

Czy używasz pola tekstowego lub TextInput?

Funkcja TextInput wywołuje zdarzenie Enter po naciśnięciu klawisza Enter. Więcej na ten temat można znaleźć pod adresem http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/fl/controls/TextInput.html#event:enter

Nie jestem pewien, jak to działa w przypadku Textfield.

+0

używam tekstu narzędzie, a następnie ustawiam, że to pole jest tekstem wejściowym. Próbowałem użyć inputText.enter = funkcja (e: Object) {bla}, ale wyrzuca Błąd # 1056: Nie można utworzyć właściwości wprowadź w flash.text.TextField. Dzięki. –

2

Dla tych, zastanawiając się, jak obsługiwać „Enter”, naciśnij klawisz z pola TextInput raczej niż TextField, oto prosty proces:

import fl.events.ComponentEvent 

... 

myListeningField.addEventListener(ComponentEvent.ENTER, listenerMethod); 


function listenerMethod(e:Event):void{ 
    //DO SOME STUFF 
} 
Powiązane problemy