En mi experiencia, el input type="text" onchangeevento generalmente ocurre solo después de que dejas ( blur) el control.
¿Hay alguna forma de obligar al navegador a activarse onchangecada vez textfieldque 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 setTimeoutla única manera? .. Feo :-)
javascript
html
forms
Ilya Birman
fuente
fuente

Respuestas:
Actualizar:
Ver otra respuesta (2015).
Respuesta original de 2009:
Entonces, ¿quieres que el
onchangeevento 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 sutextInputlugarfuente
onkeypressse debe utilizar en lugar deonkeydown.onkeydownse 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.onkeypressse activa cada vez que se agrega un carácter al campo de texto.onchangefuego 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 sienteonchangesin 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
oninputincluso en IE9 es parcial ( caniuse.com/#feat=input-event ).innerTexten lugar deinnerHTMLpara 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
keydownporque duplicará el valor de la entrada, elimínelo.Javascript es impredecible y divertido aquí.
onchangeocurre solo cuando desenfoca el cuadro de textoonkeyup&onkeypressno siempre ocurre en el cambio de textoonkeydownocurre en el cambio de texto (pero no puede rastrear cortar y pegar con el clic del mouse)onpaste&oncutocurre 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,oncutyonpaste. 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
oninputytextInputson los eventos la solución real para esto, pero no es compatible con todos los navegadores.onkeyupyonkeydown, que son similares. Ambos pueden capturar las teclas Ctrl, Alt, Shift y Meta. Para el tercer punto, supongo que te refieresonkeypress.onkeyupsucede después de escribir, por ejemplo, presionotcuando levanto el dedo, la acción ocurre pero enkeydownla acción sucede antes de que digito el caráctertEspero que esto sea útil para alguien.
Por
onkeyuplo 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
onkeyupyonchange.onchangeen realidad se encarga de las operaciones de pegado del mouse durante el enfoque perdido del campo.[Actualización] En HTML5 o posterior, úselo
oninputpara obtener actualizaciones de modificación de caracteres en tiempo real, como se explica en otras respuestas anteriores.fuente
oninputes 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
inputevento.-
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,keyupykeypresseventos.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
oninputpropiedad con JavaScript:Método 3: definir la
oninputpropiedad 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