Pregunta

¿Debo usar el evento change o textInput para capturar la entrada del usuario en un control TextInput? ¿Por qué?

¿Fue útil?

Solución

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

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

flash.events.TextEvent .TEXT_INPUT :

  

" Se distribuye cuando el usuario escribe, elimina o pega texto en el   control. "

(ignore la palabra " eliminar " allí; acabo de probarlo y este evento no se envía cuando el usuario elimina el texto)

flash.events.Event .CHANGE :

  

" Se distribuye cuando el texto en el control TextInput cambia a través del usuario   entrada. Este evento no ocurre si   usa enlace de datos o ActionScript   código para cambiar el texto . "

También puede usar el evento valueCommit , que se envía cuando el usuario " confirma " los cambios (generalmente alejando el foco del campo de texto), pero recuerde que este evento también se distribuye cuando el valor del campo se cambia mediante programación.

Otros consejos

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

Dependiendo de para qué esté capturando la entrada del usuario, podría subclasificar el componente TextInput y anular los oyentes internos para los eventos de cambio y textInput.

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

Todo lo que necesita hacer es agregar lo siguiente después de su llamada super () en el constructor de su objeto subclasificado:

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

Y luego agregue los métodos de escucha y el código que desea ejecutar.

Los eventos Event.CHANGE y TextEvent.TEXT_INPUT se activan en cada carácter escrito. Si desea un evento que solo se active una sola vez para un campo TextInput determinado, use FocusEvent.FOCUS_OUT .

Al igual que Event.CHANGE y TextEvent.TEXT_INPUT, este evento solo se activará para la entrada del usuario, no para cambios programáticos en el valor.

CHANGE no le dice lo que ha cambiado: TEXT_INPUT y KEY_DOWN do.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top