Excepto changesolo dispara una vez que el campo ha perdido el foco. inputdispara de inmediato.
jcsanyi
3
¿Has intentado buscarlo?
indefinido
2
@undefined Sí, de lo contrario no habría creado una pregunta para ello. Lo único que aparece en Google son artículos sobre el input elemento y cómo adjuntarle eventos.
Se produce cuando el contenido de texto de un elemento se cambia a través de la interfaz de usuario.
No es exactamente un alias keyupporque keyupse disparará incluso si la tecla no hace nada (por ejemplo: presionar y luego soltar la tecla Control activará un keyupevento).
Una buena manera de pensarlo es así: es un evento que se activa cada vez que cambia la entrada. Esto incluye, pero no se limita a, presionar teclas que modifican la entrada (por lo tanto, por ejemplo, Ctrlpor sí solo no activará el evento, pero Ctrl-Vpara pegar algo de texto lo hará), seleccionando una opción de autocompletar, medio de estilo Linux -Haga clic en pegar, arrastrar y soltar, y muchas otras cosas.
Vea esta página y los comentarios sobre esta respuesta para más detalles.
¿Sabes si jQuery constituye el soporte de navegador que falta? (IE8, inconsistencias IE9, etc.)
jcsanyi
44
Acabo de buscar en Google 'js input event'. Existe una habilidad especial para saber qué términos usar para encontrar lo que desea en Google; Viene con experiencia. Y luego, por supuesto, google graba todo y lo usa para aprender lo que realmente quieres. La mayoría de mis búsquedas son para documentos de API y preguntas de programación, por lo que con el tiempo aprendí que cuando busco cosas, probablemente debería mostrarme documentos de API y respuestas de programación.
J David Smith
3
Bueno, estaba buscando "evento de entrada jQuery", no tenía idea de que era un evento JS original. Lo mismo aquí, los primeros resultados son generalmente de SO, que considero principalmente como respuestas de facto / fuentes oficiales de información.
silkfire
18
inputen realidad es más que un simple filtro keyup, por ejemplo, también se activará cuando se seleccione el valor de la lista de valores utilizados anteriormente ... Era algo que sería muy difícil de manejar si no hubiera ningún inputevento.
szeryf
2
oninputtambién se dispara cuando el texto se cambia con el mouse (ya sea arrastrando y soltando, o haciendo clic con el botón derecho en el menú o con el botón central para pegar)
Denilson Sá Maia
157
oninput El evento es muy útil para rastrear los cambios en los campos de entrada.
Sin embargo, no es compatible con IE versión <9. Pero las versiones anteriores de IE tienen su propio evento propietario onpropertychangeque hace lo mismo que oninput.
Entonces puedes usarlo de esta manera:
$(':input').on('input propertychange');
Para tener un soporte completo de crossbrowser.
Dado que el cambio de propiedad se puede activar para CUALQUIER cambio de propiedad, por ejemplo, la propiedad deshabilitada se cambia, entonces desea incluir esto:
Exactamente lo que necesitaba. Gracias. (Odio tener que soportar <IE9.)
DaleyKD
Más información: "Opera no dispara un evento de entrada después de soltar texto en un campo de entrada. IE 9 no dispara un evento de entrada cuando el usuario elimina caracteres de la entrada llenada por el teclado, corta o arrastra operaciones". developer.mozilla.org/en-US/docs/Web/Events/…
tkane2000
Hay un problema con este código. Si la longitud máxima se establece en el elemento de entrada, el evento 'entrada' se activa incluso cuando se alcanza la longitud máxima y no se cambia el valor
nivcaner
Pero, ¿por qué no solo dos funciones separadas? De esa manera, no es necesario verificar el tipo de evento o el nombre de la propiedad. El código podría estar en una tercera función compartida.
ADTC
17
Usando jQuery, los siguientes son idénticos en efecto:
Con el inputevento, sin embargo, solo el segundo patrón parece funcionar en los navegadores que he probado.
Por lo tanto, esperaría que esto funcione, pero NO (al menos actualmente):
$(':text').input(function(){ doSomething();});
Una vez más, si desea aprovechar la delegación de eventos (por ejemplo, para configurar el evento #containerantes de que input.textse agregue al DOM), debe tener esto en cuenta:
Como dijo claustrofob, oninput es compatible con IE9 +.
Sin embargo , "El evento oninput tiene errores en Internet Explorer 9. No se activa cuando los caracteres se eliminan de un campo de texto a través de la interfaz de usuario solo cuando se insertan caracteres. Aunque el evento onpropertychange es compatible con Internet Explorer 9, pero de manera similar a evento de entrada, también tiene errores, no se dispara al borrar.
Dado que los caracteres se pueden eliminar de varias maneras (teclas Retroceso y Eliminar, CTRL + X, comando Cortar y Eliminar en el menú contextual), no hay una buena solución para detectar todos los cambios. Si el comando Eliminar del menú contextual elimina los caracteres, la modificación no se puede detectar en JavaScript en Internet Explorer 9. "
Tengo buenos resultados vinculados tanto a la entrada como al keyup (y keydown, si desea que se active en IE mientras mantiene presionada la tecla Retroceso).
Creo que 'input' simplemente funciona aquí de la misma manera que 'oninput' lo hace en el modelo de evento DOM Nivel O.
De paso:
Justo cuando silkfire lo comentó, yo también busqué en Google 'jQuery input event'. Por lo tanto, me condujo hasta aquí y me sorprendió saber que 'input' es un parámetro aceptable para el comando bind () de jquery . En jQuery in Action (p. 102, 2008 ed.) 'Entrada' no se menciona como un posible evento (contra otros 20, desde 'desenfoque' hasta 'descarga'). Es cierto que, en la pág. 92, se podría suponer lo contrario de la relectura (es decir, de una referencia a diferentes identificadores de cadena entre los modelos de Nivel 0 y Nivel 2). Eso es bastante engañoso.
Sin embargo, no todos son compatibles con todos los navegadores.
Mozilla establece lo siguiente sobre el evento de entrada:
El evento de entrada DOM se dispara sincrónicamente cuando se cambia el valor de un elemento. Además, se dispara a editores contentos cuando se cambia su contenido.
change
solo dispara una vez que el campo ha perdido el foco.input
dispara de inmediato.input
elemento y cómo adjuntarle eventos.Respuestas:
No es exactamente un alias
keyup
porquekeyup
se disparará incluso si la tecla no hace nada (por ejemplo: presionar y luego soltar la tecla Control activará unkeyup
evento).Una buena manera de pensarlo es así: es un evento que se activa cada vez que cambia la entrada. Esto incluye, pero no se limita a, presionar teclas que modifican la entrada (por lo tanto, por ejemplo,
Ctrl
por sí solo no activará el evento, peroCtrl-V
para pegar algo de texto lo hará), seleccionando una opción de autocompletar, medio de estilo Linux -Haga clic en pegar, arrastrar y soltar, y muchas otras cosas.Vea esta página y los comentarios sobre esta respuesta para más detalles.
fuente
input
en realidad es más que un simple filtrokeyup
, por ejemplo, también se activará cuando se seleccione el valor de la lista de valores utilizados anteriormente ... Era algo que sería muy difícil de manejar si no hubiera ningúninput
evento.oninput
también se dispara cuando el texto se cambia con el mouse (ya sea arrastrando y soltando, o haciendo clic con el botón derecho en el menú o con el botón central para pegar)oninput
El evento es muy útil para rastrear los cambios en los campos de entrada.Sin embargo, no es compatible con IE versión <9. Pero las versiones anteriores de IE tienen su propio evento propietario
onpropertychange
que hace lo mismo queoninput
.Entonces puedes usarlo de esta manera:
Para tener un soporte completo de crossbrowser.
Dado que el cambio de propiedad se puede activar para CUALQUIER cambio de propiedad, por ejemplo, la propiedad deshabilitada se cambia, entonces desea incluir esto:
fuente
Usando jQuery, los siguientes son idénticos en efecto:
Con el
input
evento, sin embargo, solo el segundo patrón parece funcionar en los navegadores que he probado.Por lo tanto, esperaría que esto funcione, pero NO (al menos actualmente):
Una vez más, si desea aprovechar la delegación de eventos (por ejemplo, para configurar el evento
#container
antes de queinput.text
se agregue al DOM), debe tener esto en cuenta:Lamentablemente, de nuevo, ¡NO funciona actualmente!
Solo este patrón funciona:
EDITADO CON MÁS INFORMACIÓN ACTUAL
Ciertamente puedo confirmar que este patrón:
AHORA FUNCIONA también, en todos los navegadores 'estándar'.
fuente
Como dijo claustrofob, oninput es compatible con IE9 +.
Sin embargo , "El evento oninput tiene errores en Internet Explorer 9. No se activa cuando los caracteres se eliminan de un campo de texto a través de la interfaz de usuario solo cuando se insertan caracteres. Aunque el evento onpropertychange es compatible con Internet Explorer 9, pero de manera similar a evento de entrada, también tiene errores, no se dispara al borrar.
Dado que los caracteres se pueden eliminar de varias maneras (teclas Retroceso y Eliminar, CTRL + X, comando Cortar y Eliminar en el menú contextual), no hay una buena solución para detectar todos los cambios. Si el comando Eliminar del menú contextual elimina los caracteres, la modificación no se puede detectar en JavaScript en Internet Explorer 9. "
Tengo buenos resultados vinculados tanto a la entrada como al keyup (y keydown, si desea que se active en IE mientras mantiene presionada la tecla Retroceso).
fuente
Tenga cuidado al usar INPUT. Este evento se dispara en foco y en desenfoque en IE 11. Pero se desencadena al cambiar en otros navegadores.
https://connect.microsoft.com/IE/feedback/details/810538/ie-11-fires-input-event-on-focus
fuente
Creo que 'input' simplemente funciona aquí de la misma manera que 'oninput' lo hace en el modelo de evento DOM Nivel O.
De paso:
Justo cuando silkfire lo comentó, yo también busqué en Google 'jQuery input event'. Por lo tanto, me condujo hasta aquí y me sorprendió saber que 'input' es un parámetro aceptable para el comando bind () de jquery . En jQuery in Action (p. 102, 2008 ed.) 'Entrada' no se menciona como un posible evento (contra otros 20, desde 'desenfoque' hasta 'descarga'). Es cierto que, en la pág. 92, se podría suponer lo contrario de la relectura (es decir, de una referencia a diferentes identificadores de cadena entre los modelos de Nivel 0 y Nivel 2). Eso es bastante engañoso.
fuente
jQuery tiene la siguiente firma para el
.on()
método:.on( events [, selector ] [, data ], handler )
Los eventos pueden ser cualquiera de los enumerados en esta referencia:
https://developer.mozilla.org/en-US/docs/Web/Events
Sin embargo, no todos son compatibles con todos los navegadores.
Mozilla establece lo siguiente sobre el evento de entrada:
fuente
trabajando tanto en IE como en Chrome
fuente
bind
está en desuso, usoon