En mi experiencia, el input type="text"
onchange
evento generalmente ocurre solo después de que dejas ( blur
) el control.
¿Hay alguna forma de obligar al navegador a activarse onchange
cada vez textfield
que cambia el contenido? Si no, ¿cuál es la forma más elegante de rastrear esto "manualmente"?
El uso de onkey*
eventos no es confiable, ya que puede hacer clic derecho en el campo y elegir Pegar, y esto cambiará el campo sin ninguna entrada de teclado.
¿Es setTimeout
la única manera? .. Feo :-)
javascript
html
forms
Ilya Birman
fuente
fuente
Respuestas:
Actualizar:
Ver otra respuesta (2015).
Respuesta original de 2009:
Entonces, ¿quieres que el
onchange
evento se active al presionar teclas, desenfocar y pegar? Eso es magiaSi desea realizar un seguimiento de los cambios a medida que escriben, use
"onkeydown"
. Si necesita atrapar operaciones de pegado con el mouse, use"onpaste"
( IE , FF3 ) y"oninput"
( FF, Opera, Chrome, Safari 1 ).1 Roto por
<textarea>
en Safari. Usar en sutextInput
lugarfuente
onkeypress
se debe utilizar en lugar deonkeydown
.onkeydown
se dispara cuando se hace clic en una tecla. Si un usuario mantiene presionada una tecla, el evento solo se disparará una vez para el primer personaje.onkeypress
se activa cada vez que se agrega un carácter al campo de texto.onchange
fuego sobre todas esas acciones.<input onchange="doSomething();" onkeypress="this.onchange();" onpaste="this.onchange();" oninput="this.onchange();">
hará lo suficientemente bien para la mayoría.$().on('change keydown paste input', function() {})
En estos días escucha
oninput
. Se sienteonchange
sin la necesidad de perder el foco en el elemento. Es HTML5.Es compatible con todos (incluso móviles), excepto IE8 y versiones inferiores. Para IE agregar
onpropertychange
. Lo uso así:fuente
oninput
incluso en IE9 es parcial ( caniuse.com/#feat=input-event ).innerText
en lugar deinnerHTML
para que no se muestre ningún marcadoEl siguiente código funciona bien para mí con Jquery 1.8.3
HTML:
<input type="text" id="myId" />
Javascript / JQuery:
fuente
keydown
porque duplicará el valor de la entrada, elimínelo.Javascript es impredecible y divertido aquí.
onchange
ocurre solo cuando desenfoca el cuadro de textoonkeyup
&onkeypress
no siempre ocurre en el cambio de textoonkeydown
ocurre en el cambio de texto (pero no puede rastrear cortar y pegar con el clic del mouse)onpaste
&oncut
ocurre con la pulsación de teclas e incluso con el clic derecho del mouse.Entonces, para rastrear el cambio en el cuadro de texto, necesitamos
onkeydown
,oncut
yonpaste
. En la devolución de llamada de este evento, si verifica el valor del cuadro de texto, no obtiene el valor actualizado ya que el valor se cambia después de la devolución de llamada. Entonces, una solución para esto es establecer una función de tiempo de espera con un tiempo de espera de 50 milisegundos (o puede ser menos) para rastrear el cambio.Este es un truco sucio, pero esta es la única forma, como investigué.
Aquí hay un ejemplo. http://jsfiddle.net/2BfGC/12/
fuente
oninput
ytextInput
son los eventos la solución real para esto, pero no es compatible con todos los navegadores.onkeyup
yonkeydown
, que son similares. Ambos pueden capturar las teclas Ctrl, Alt, Shift y Meta. Para el tercer punto, supongo que te refieresonkeypress
.onkeyup
sucede después de escribir, por ejemplo, presionot
cuando levanto el dedo, la acción ocurre pero enkeydown
la acción sucede antes de que digito el caráctert
Espero que esto sea útil para alguien.
Por
onkeyup
lo tanto, es mejor para cuando desea enviar lo que acaba de escribir ahora.fuente
Tenía un requisito similar (campo de texto de estilo twitter). Usado
onkeyup
yonchange
.onchange
en realidad se encarga de las operaciones de pegado del mouse durante el enfoque perdido del campo.[Actualización] En HTML5 o posterior, úselo
oninput
para obtener actualizaciones de modificación de caracteres en tiempo real, como se explica en otras respuestas anteriores.fuente
oninput
es el camino a seguir. Pero, cuando implementé, HTML5 no existía y teníamos IE 8 :(. Agradezco su actualización ya que proporciona información actualizada para los usuarios.Creo que en 2018 es mejor usar el
input
evento.-
Como lo describe la especificación WHATWG ( https://html.spec.whatwg.org/multipage/indices.html#event-input-input ):
-
Aquí hay un ejemplo de cómo usarlo:
fuente
Si usa SOLO Internet Explorer, puede usar esto:
Espero que ayude.
fuente
hay una solución bastante cercana (no arregles todas las formas de pegar) pero la mayoría de ellas:
Funciona tanto para entradas como para áreas de texto:
Hazlo así:
Como dije, no todas las formas de pegar activan un evento en todos los navegadores ... lo peor es que algunos no activan ningún evento en absoluto, pero los temporizadores son horribles para ser utilizados para tal.
Pero la mayoría de las formas de pegado se realizan con el teclado y / o el mouse, por lo que normalmente se activan onkeyup o onmouseup después de pegar, también se activa onkeyup al escribir en el teclado.
Asegúrese de que su código de verificación no tome mucho tiempo ... de lo contrario, el usuario tendrá una mala impresión.
Sí, el truco es disparar con la tecla y con el mouse ... pero cuidado, ¡ambos pueden ser disparados, así que ten en cuenta eso!
fuente
Por favor, juzgue el próximo enfoque usando JQuery:
HTML:
Javascript (JQuery):
fuente
"input" funcionó para mí.
fuente
Usted podría utilizar los
keydown
,keyup
ykeypress
eventos.fuente
Para realizar un seguimiento de cada uno, intente este ejemplo y, antes de eso, reduzca completamente la velocidad de parpadeo del cursor a cero.
onblur: el evento se genera al salir
onchange: el evento se genera al salir si se realiza algún cambio en inputtext
onkeydown: el evento se genera al presionar cualquier tecla (también para mantener pulsadas las teclas durante mucho tiempo)
onkeyup: el evento se genera en cualquier lanzamiento de tecla
onkeypress: igual que onkeydown (o onkeyup) pero no reaccionará para ctrl, backsace, alt other
fuente
2018 aquí, esto es lo que hago:
Si puede señalar fallas en este enfoque, le agradecería.
fuente
Método 1: agregue un detector de eventos para
input
:Método 2: definir la
oninput
propiedad con JavaScript:Método 3: definir la
oninput
propiedad con HTML:fuente
Robert Siemer addEventListener no es compatible con IE8.
"Las versiones anteriores de IE admitían un método equivalente y exclusivo de EventTarget.attachEvent ()". https://developer.mozilla.org/it/docs/Web/API/Element/addEventListener
fuente