2008-11-12 9 views

Respuesta

46

textInput se envía solo cuando el usuario tiene entrada texto en el control. change, por otro lado, se envía en cada cambio cometido por el usuario. Por ejemplo, si el usuario elimina una parte del texto, solo se envía el evento change.

Ninguno de estos se distribuye cuando el texto se modifica a través de código:

flash.events.TextEvent.TEXT_INPUT:

"distribuye cuando el usuario tipos, elimina, o pastas de texto en el control ."

(ignorar la palabra "eliminar" no - yo sólo probamos y este evento es no se distribuye cuando el texto se elimina por el usuario)

flash.events.Event.CHANGE:

"se distribuye al texto en los cambios de control a través de TextInput usuario entrada. Este evento no se produce si se utilizan los datos de unión o ActionScriptCódigo depara cambiar el texto. "

También puede utilizar el evento valueCommit, que se distribuye cuando el usuario "se compromete" los cambios (por lo general moviendo el foco lejos del campo de texto), pero recuerda que este evento también se distribuye cuando el campo el valor se cambia programáticamente.

+2

Muchas gracias por la respuesta aclaratoria. Como nota al margen: Hice algunas pruebas y descubrí que al acceder a la propiedad 'text' en el controlador de eventos para el evento' textInput' (usando 'event.currentTarget.text'), el valor que obtengo refleja el valor de' text' _antes_ de la pulsación de tecla que activó el evento. –

+0

Eso no es cierto para mí, al menos no en Flex 4.5 (creo que Flex 4 también) usando spark TextInput. Obtengo el último valor de texto en el evento de cambio, también hay un evento cambiante enviado anteriormente. – Enrique

3

Esa es una gran respuesta, hasseg. Si tuviera suficiente representante, lo votaría.

Dependiendo de lo que está capturando la entrada del usuario para, usted podría subclase del componente TextInput y anular los oyentes internos para el cambio y eventos textInput.

No sé si hay muchas razones por las que desea hacer esto, pero lo hice recientemente para tratar un error en OS X que causa que los saltos de línea pegados se representen como '\ r', en lugar de '\ n'.

Todo lo que necesita hacer es añadir la siguiente llamada después de su super() en el constructor de su objeto subclases:

this.addEventListener(Event.CHANGE, textFieldChangeListener); 
this.addEventListener(TextEvent.TEXT_INPUT,textFieldInputListener); 

y luego añadir los métodos de detección y el código que desea ejecutar.

0

Tanto Event.CHANGE y TextEvent.TEXT_INPUT eventos de disparo para cada carácter escrito. Si desea un evento que solo se active una sola vez para un campo de entrada de texto determinado, use FocusEvent.FOCUS_OUT.

Como Event.CHANGE y TextEvent.TEXT_INPUT, este evento solo se activará para la entrada del usuario, no para cambios programáticos al valor.

+1

Me di cuenta después de enviar esto que usar FOCUS_OUT no es un gran enfoque porque, si bien es cierto que solo se desencadena una vez por campo, no dice nada sobre si el usuario cambió el valor o no. – hrabinowitz

+0

Parece que, como lo ha hecho con las notas de arriba, ese CAMBIO es la mejor elección para escuchar los cambios del usuario en un campo de entrada de texto. Sin embargo, si el usuario escribe control-C para copiar un valor de campo, esto también activará un evento CHANGE. – hrabinowitz

0

CHANGE duerma te diga lo ha cambiado sin embargo - TEXT_INPUT y KEY_DOWN hacer.

+0

Sin embargo, puede tomar la totalidad del texto de TextInput al procesar el evento CHANGE si necesita usar el resultado final para algo. –

Cuestiones relacionadas