Me gustaría tener alguna funcionalidad por la cual si escribo
<textarea maxlength="50"></textarea>
<textarea maxlength="150"></textarea>
<textarea maxlength="250"></textarea>
impondrá automáticamente el maxlength en el textArea. Si es posible, no proporcione la solución en jQuery.
Nota: Esto se puede hacer si hago algo como esto:
<textarea onkeypress="return imposeMaxLength(event, this, 110);" rows="4" cols="50">
function imposeMaxLength(Event, Object, MaxLen)
{
return (Object.value.length <= MaxLen)||(Event.keyCode == 8 ||Event.keyCode==46||(Event.keyCode>=35&&Event.keyCode<=40))
}
Copiado de ¿Cuál es la mejor manera de emular un atributo "maxlength" de entrada HTML en un área de texto HTML?
Pero el punto es que no quiero escribir onKeyPress y onKeyUp cada vez que declaro un textArea.
javascript
html
textarea
Rakesh Juyal
fuente
fuente
Respuestas:
fuente
onblur
no manejará el pegado hasta que el usuario haga clic fuera del área de texto.onkeyup
no manejará el pegado si se hace a través de un menú contextual o un menú del navegador. Este enfoque funciona si no necesita filtrar para pegar. Vea esta respuesta para un enfoque basado en temporizador stackoverflow.com/a/10390626/1026459Sé que desea evitar jQuery, pero como la solución requiere JavaScript, esta solución (usando jQuery 1.4) es la más consistente y robusta.
Inspirado por, pero una mejora con respecto a la respuesta de Dana Woodman:
Los cambios de esa respuesta son: Simplificado y más genérico, usando jQuery.live y tampoco estableciendo val si la longitud está bien (conduce a teclas de flecha de trabajo en IE y una aceleración notable en IE):
EDITAR: Versión actualizada para jQuery 1.7+ , usando en
on
lugar delive
fuente
Actualización Utilice la solución de Eirik en su
.live()
lugar, ya que es un poco más robusta.Aunque querías una solución que no usara jQuery, pensé en agregar una para cualquiera que encuentre esta página a través de Google y busque una solución al estilo de jQuery:
Espero que les sea útil a los empleados de Google ...
fuente
HTML5 agrega un
maxlength
atributo altextarea
elemento, así:Actualmente, esto es compatible con Chrome 13, FF 5 y Safari 5. No es sorprendente que esto no sea compatible con IE 9. (Probado en Win 7)
fuente
Esta solución evita el problema en IE donde se elimina el último carácter cuando se agrega un carácter en el medio del texto. También funciona bien con otros navegadores.
La validación de mi formulario se ocupa de cualquier problema en el que el usuario haya pegado (solo parece ser un problema en IE) texto que exceda la longitud máxima del área de texto.
fuente
Este es un código modificado que acabo de usar en mi sitio. Se ha mejorado para mostrar el número de caracteres restantes al usuario.
(Lo siento nuevamente por OP que no solicitó jQuery. Pero en serio, ¿quién no usa jQuery en estos días?)
NO se ha probado con caracteres internacionales de varios bytes, por lo que no estoy seguro de cómo funciona exactamente con ellos.
fuente
También agregue el siguiente evento para lidiar con pegar en el área de texto:
fuente
del atributo HTML maxlength w3schools.com
Para IE8 o versiones anteriores, debe usar lo siguiente
PD
del atributo HTML maxlength w3schools.com
fuente
Mejor solución en comparación con recortar el valor del área de texto.
fuente
Puede usar jQuery para hacerlo fácil y claro
DEMO de JSFiddle
Se ensayó en
Firefox
,Google Chrome
yOpera
fuente
text
se llena con el "valor" del texarea antes de que se haya actualizado. Esto significa que su prueba debería serif( text.length +1 > maxlength) {return false;}
. De lo contrario, solo se podrían ponermaxlength - 1
caracteres dentro:/
if(text.length+1 > maxlength)
oif(text.length >= maxlength)
...El pequeño problema con el código anterior es que val () no activa el evento change (), por lo que si usa backbone.js (u otros marcos para el enlace de modelos), el modelo no se actualizará.
Estoy publicando que la solución funcionó muy bien para mí.
fuente
Implementé el
maxlength
comportamientotextarea
recientemente y encontré el problema descrito en esta pregunta: Chrome cuenta los caracteres incorrectamente en el área de texto con el atributo maxlength .Entonces, todas las implementaciones enumeradas aquí funcionarán con pocos errores. Para solucionar este problema agrego
.replace(/(\r\n|\n|\r)/g, "11")
antes.length
. Y tenlo en cuenta al cortar hilo.Terminé con algo como esto:
No estoy seguro si resuelve el problema por completo, pero me funciona por ahora.
fuente
Pruebe este jQuery que funciona en IE9, FF, Chrome y proporciona una cuenta regresiva a los usuarios:
fuente
Intente utilizar este ejemplo de código:
fuente
Esto es mucho más fácil:
fuente
maxlength
porque puede pegar cadenas que sean más largas que la longitud deseada.