¿Cómo detecto el evento de cambio en textarea usando javascript?
Estoy tratando de detectar cuántos caracteres quedan disponibles mientras escribes.
Intenté usar el evento onchange, pero parece que solo funciona cuando el foco está fuera.
javascript
Teepusink
fuente
fuente
onkeyup
Es un evento terrible para la detección de entrada. Usooninput
yonpropertychange
(para soporte de IE).onchange
está NO activa cuando se produce un menú contextual cortar / pegar.Es 2012, la era posterior a la PC está aquí, y todavía tenemos que luchar con algo tan básico como esto. Esto debería ser muy simple .
Hasta el momento en que se cumpla ese sueño, esta es la mejor manera de hacerlo, navegador cruzado: use una combinación de eventos
input
yonpropertychange
, de esta manera:El
input
evento se encarga de IE9 +, FF, Chrome, Opera y Safari , yonpropertychange
se encarga de IE8 (también funciona con IE6 y 7, pero hay algunos errores).La ventaja de usar
input
yonpropertychange
es que no se disparan innecesariamente (como al presionar las teclasCtrl
oShift
); así que si desea ejecutar una operación relativamente costosa cuando el contenido del área de texto cambia, este es el camino a seguir .Ahora IE, como siempre, hace un trabajo a medias de apoyar esto:
input
nionpropertychange
dispara en IE cuando los caracteres se eliminan del área de texto. Entonces, si necesita manejar la eliminación de caracteres en IE, usekeypress
(en lugar de usarkeyup
/keydown
, porque se activan solo una vez, incluso si el usuario presiona y mantiene presionada una tecla).Fuente: http://www.alistapart.com/articles/expanding-text-areas-made-elegant/
EDITAR: Parece que incluso la solución anterior no es perfecta, como se señala correctamente en los comentarios: la presencia de la
addEventListener
propiedad en el área de texto no implica que esté trabajando con un navegador sano; Del mismo modo, la presencia de laattachEvent
propiedad no implica IE. Si desea que su código sea realmente hermético, debería considerar cambiarlo. Ver el comentario de Tim Down para los punteros.fuente
addEventListener
no implica el soporte para elinput
evento, o viceversa); detección de características sería mejor. Vea esta publicación de blog para una discusión de esto.oninput
es cómo deberíamos hacer esto, pero probablemente no debería usarloaddEventListener
como prueba para el soporte del navegador. +1 en cualquier caso.keypress
evento para manejar ese caso en IE9 (y posiblemente en versiones posteriores también).input
El controlador de eventos también se puede definir implementando la.oninput
propiedad del objeto.No probado en Firefox.
fuente
Sé que esta no es exactamente tu pregunta, pero pensé que podría ser útil. Para ciertas aplicaciones, es bueno tener activada la función de cambio no cada vez que se presiona una tecla. Esto se puede lograr con algo como esto:
Esto funciona probando si un evento más reciente se ha disparado dentro de un cierto período de retraso. ¡Buena suerte!
fuente
Sé que esta pregunta era específica de JavaScript, sin embargo, parece que no hay una forma buena y limpia de detectar SIEMPRE cuándo un área de texto cambia en todos los navegadores actuales. He aprendido que jquery se ha encargado de nosotros. Incluso maneja los cambios del menú contextual en las áreas de texto. Se utiliza la misma sintaxis independientemente del tipo de entrada.
o
fuente
bind("input cut paste"...
y funciona de maravilla: escribir, cortar y pegar usando el teclado o el menú contextual; incluso arrastrar / soltar texto.change
eventos paratextarea
.Puede escuchar el evento sobre el cambio de área de texto y hacer los cambios según lo desee. Aquí hay un ejemplo.
fuente
Keyup debería ser suficiente si se combina con la validación de entrada HTML5 / atributo de patrón. Por lo tanto, cree un patrón (regex) para validar la entrada y actuar sobre el estado .checkValidity (). Algo como a continuación podría funcionar. En su caso, desearía que una expresión regular coincida con la longitud. Mi solución está en uso / habilitada para demostración en línea aquí .
fuente
Código que he usado para IE 11 sin jquery y solo para un único área de texto:
Javascript:
y html:
fuente
Prueba este. Es simple, y desde 2016 estoy seguro de que funcionará en la mayoría de los navegadores.
fuente
Lo mejor que puede hacer es configurar una función para que se invoque en un período de tiempo determinado y esta función para verificar el contenido de su área de texto.
fuente