Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/11/2013, 18:02
Avatar de manuparquegiralda
manuparquegiralda
 
Fecha de Ingreso: junio-2012
Ubicación: Barcelona
Mensajes: 241
Antigüedad: 12 años, 5 meses
Puntos: 39
[APORTE] Sencilla función en jquery para que el textarea se ajuste al texto auto

Buenas, me he enfrentado varias veces al siguiente problema de querer hacer que un textarea se ajuste al alto del contenido que voy escribiendo en el interior.

Para Jquery hay varios plugins, pero no me gusta usar plugins en mis páginas ya que al final te llenas de códigos de terceros y... bueno es una mania personal. Así que encabezonado en conseguir ese efecto utilizando el menor código posible lo he conseguido con una función Jquery de 19 sencillas lineas.

Al estar buscando por aquí la solución antes de lograrla y no encontrarla voy a postearla aquí por si a alguien pudiera interesearle usarla.

Código HTML:
Ver original
  1. <textarea id="textareaID" cols="60" style="resize:none;  overflow:hidden; width: 250px; height:80px;" onKeyUp="controlTextArea('textareaID',80);"></textarea>

Aquí tenemos un textarea simple, pero con las dimensiones definidas en el style en lugar de en rows y cols. Y en el evento "onkeUp" llamamos a la función siguiente, pasando los siguientes parámetros, el id del textarea sobre el que se está actuando y el alto incicial que le hemos dado al textarea en nuestro "style" en este caso "80".

Código Javascript:
Ver original
  1. function controlTextArea(textArea,altInicial){
  2.     var altoExt = $("#"+textArea).height();
  3.     var altoInt = $("#"+textArea).get(0).scrollHeight;
  4.     if(altoInt > altoExt){
  5.         $("#"+textArea).animate({
  6.             height: altoInt+"px"
  7.         },"fast");
  8.     }else{
  9.         $("#"+textArea).css({
  10.             height: altInicial+"px"
  11.         });
  12.         var altoInt = $("#"+textArea).get(0).scrollHeight;
  13.         if(altoInt > altInicial){
  14.             $("#"+textArea).css({
  15.                 height: altoInt+"px"
  16.             });
  17.         }
  18.     }
  19. }

La función Jquery lo que hace es coger el alto actual del textarea y el alto del scroll actual del mismo. Si el alto del scroll (lo que llevamos escrito) es mayor al alto actual, el textarea crece hasta igualarse con el alto del scroll, que será el alto que esté ocupando lo que llevamos escrito. Si por el contrario es menor, pasaremos el textarea a su alto original y seguidamente volvemos a coger el alto del scroll. Si el scroll es más alto que el alto inicial le volvemos a dar el alto del interior al textarea. Pero esta segunda vez lo hacemos sin el animate para que no se vea crecer de nuevo desde la altura inicial.

Como veis es una función muy simple y bastante funcional que cualquiera puede adapatar a sus necesidades y así evitar pluggins con mucho código que al final relentizan la carga de nuestra página.

Espero que les sirva
__________________
Diseño Web - Arisman Web