Limitar el máximo de caracteres de un Textarea con jQuery

Como bien es sabido, en las especifiaciones de HTML (4.01), el atributo maxlength no está definido para el elemento TEXTAREA, al contrario del elemento INPUT que si que lo contempla en su lista de atributos. Eso significa que el control del máximo de caracteres permitidos por un elemento Textarea debe ser implementado a posteriori por el desarrollador (o los desarrolladores) del sito web que desea aplicarlo.

Harto de encontrarme por enésima vez con el mismo problema, he desarrollado una pequeña función en jQuery que resuelve el problema permitiendo aplicar el atributo maxlength a un Textarea. He aquí la función:

function textarea () {
var maximos = new Array ();
$("textarea").attr("maxlength", function (i) {
if (maximos[i] = this.getAttribute('maxlength')) {
$(this).keypress(function(event) {
return (
(event.which == 8) ||(event.which == 9) || (this.value.length < maximos[i]));
})}});
}

Y he aquí una pequeña explicación del script:

1. Declaramos el array donde guardaremos los valores del maxlength de todos los textarea de la página
var maximos = new Array ();

2. Recorremos todos los elementos textarea de la página y nos guardamos el valor del atributo maxlength de cada uno
$("textarea").attr("maxlength", function (i) {
if (maximos[i] = this.getAttribute('maxlength')) {

3. Definimos una acción para el evento KeyPress en los textarea que tengan atributo maxlength $(this).keypress(function(event) {

4. Escribimos en el textarea cuando la tecla sea “borrar” o “tabulador” o si aún no hemos llegado al valor de maxlength
return ((event.which == 8) || (event.which == 9) || (this.value.length < maximos[i]));

Para una mejor comprensión del procedimiento puedes consultar este ejemplo práctico.

Este script utilitza jQuery 1.2.1, es no intrusivo, se ejecuta en el lado cliente y está inspirado en el método de limitación de caracteres utilizado por Twitter.

7 thoughts on “Limitar el máximo de caracteres de un Textarea con jQuery

  1. Merci Oriol, no coneixia aquesta solució que esmentes. El codi resulta lleugerament més complex però és una bona opció en el cas de que la pàgina no utilitzi jQuery enlloc més.

  2. “… el atributo maxlength no está definido para el elemento TEXTAREA” y para ser validado por el W3C tampoco puede estar dicho campo incluido en el HTML, no?

    En el caso de que alguien haga copy & paste de texto en el textarea de tu ejemplo, se puede ‘saltar’ libremente las restricciones ¿?

    P.D. Me intimida el icono de las gafas en medio de la página.
    P.D2. M’ha fet gràcia trobar el teu blog xDD

    • buenos dias que tal, as solucionado el siguiente problema?

      en el cual te referias a lo de copiar y pegar en un text area?

      PSI

      “… el atributo maxlength no está definido para el elemento TEXTAREA” y para ser validado por el W3C tampoco puede estar dicho campo incluido en el HTML, no?

      En el caso de que alguien haga copy & paste de texto en el textarea de tu ejemplo, se puede ‘saltar’ libremente las restricciones ¿?

      P.D. Me intimida el icono de las gafas en medio de la página.
      P.D2. M’ha fet gràcia trobar el teu blog xDD

  3. hola creo que la mejor forma es escribir un aviso al lado que informe el max de caracteres y validar esto por el lado del servidor con php por ejemplo, bueno a mi me sirvió!

Deixa un comentari

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Canvia )

Twitter picture

You are commenting using your Twitter account. Log Out / Canvia )

Facebook photo

You are commenting using your Facebook account. Log Out / Canvia )

Connecting to %s