2010-02-19 15 views
9

Quiero capturar la tecla enter cuando el usuario está llenando un campo de entrada de texto en AS3. creo que tengo que hacer algo como esto:Capturar presionar la tecla presionar en el campo de entrada de texto en AS3

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

Pero no puedo encontrar la mejor manera de hacer esto. Por cierto, el texto de entrada tiene una restricción:

inputText.restrict = "0-9"; 

¿Debo añadir la tecla Intro para las restricciones?

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

Gracias de antemano.

Respuesta

34

respuesta corregido

Puede escuchar fácilmente para eventos de teclado que se producen cuando el campo de texto se centra.

Simplemente agregue un evento KEY_DOWN directamente al campo de texto y luego haga lo que desee.

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

En una nota aparte, campos de texto también envían otros eventos útiles:

  • Cuando modificado por el usuario (si es un campo de texto de entrada) - Event.CHANGE
  • Cuando el texto se escribe por el usuario (si es un campo de texto de entrada) - TextEvent.TEXT_INPUT
  • Cuando se hace clic en un enlace (si el texto HTML) - TextEvent.LINK
  • Cuando desplaza por el usuario (si es de varias líneas y los contenidos Don' t fi t) - Event.SCROLL

Anterior respuesta incorrecta:

Creo que la única manera de hacer realidad lo que quiere es un poco compleja.

Básicamente, no se puede obtener ningún evento del campo de texto regular que se activará cuando se presione la tecla Entrar. Tienes que trabajar alrededor de ...

Una idea sería escuchar el campo de texto para los eventos de enfoque. Cuando tiene foco, agrega un oyente al escenario para los eventos de teclado y comprueba si la tecla presionada es Intro, si es así active su acción, de lo contrario omita.

Código de ejemplo:

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

Utilicé: inputText.addEventListener (KeyboardEvent.KEY_DOWN, controlador); controlador de funciones (evento: KeyboardEvent) { if (event.charCode == 13) { doSomething(); } } Y funciona. Gracias. –

+0

@Jonathan - He editado la respuesta para reflejar la verdad. –

+0

Por favor revise sus datos antes de publicar tales tonterías, esta pregunta tiene más de un año de antigüedad, y más de 4000 personas han sido engañadas haciéndoles creer que cosas tan simples son difíciles. –

0

¿Estás utilizando un campo de texto o un TextInput?

TextInput envía un Enter-event cuando se presiona la tecla enter. Más sobre esto se puede encontrar en http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/fl/controls/TextInput.html#event:enter

No estoy seguro de cómo funciona esto para un campo de texto.

+0

utilizo el texto herramienta, y luego establezco que la caja es un Texto de entrada. He intentado utilizar inputText.enter = function (e: Object) {bla} pero arroja Error # 1056: No se puede crear la propiedad enter en flash.text.TextField. Gracias. –

2

Para los que preguntan cómo manejar una "Intro" pulsación de tecla con un campo TextInput en lugar de un campo de texto, aquí está el proceso simple:

import fl.events.ComponentEvent 

... 

myListeningField.addEventListener(ComponentEvent.ENTER, listenerMethod); 


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