Foros del Web » Programando para Internet » Jquery »

[APORTE] Sencilla función en jquery para que el textarea se ajuste al texto auto

Estas en el tema de [APORTE] Sencilla función en jquery para que el textarea se ajuste al texto auto en el foro de Jquery en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 12/11/2013, 18:02
Avatar de manuparquegiralda  
Fecha de Ingreso: junio-2012
Ubicación: Barcelona
Mensajes: 241
Antigüedad: 11 años, 10 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
  #2 (permalink)  
Antiguo 14/11/2013, 06:40
Avatar de Maganius  
Fecha de Ingreso: septiembre-2010
Mensajes: 310
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: [APORTE] Sencilla función en jquery para que el textarea se ajuste al text

Gracias por el aporte! seguramente a muchos le servirá.

Tal vez quede mejor así para no tener que pasar un ID siempre

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

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

No entiendo porque en el ELSE haces la misma comprobación que en el IF? no lo probe por lo que estaba en duda si borrarlo o no.

Última edición por Maganius; 14/11/2013 a las 06:49
  #3 (permalink)  
Antiguo 17/11/2013, 12:37
Avatar de manuparquegiralda  
Fecha de Ingreso: junio-2012
Ubicación: Barcelona
Mensajes: 241
Antigüedad: 11 años, 10 meses
Puntos: 39
Respuesta: [APORTE] Sencilla función en jquery para que el textarea se ajuste al text

Cita:
Iniciado por Maganius Ver Mensaje
No entiendo porque en el ELSE haces la misma comprobación que en el IF? no lo probe por lo que estaba en duda si borrarlo o no.
Vale, es que en tu función no has puesto esta linea: var altoInt = $("#"+textArea).get(0).scrollHeight;. En el else te vuelve a coger el alto del scrollheight después de haber puesto el textarea en su alto original y seguidamente te vuelve poner el alto de éste en el textarea. Se utiliza para cuando se está borrando y queremos que el textarea reduzca su tamaño.


Cita:
Iniciado por Maganius Ver Mensaje
Tal vez quede mejor así para no tener que pasar un ID siempre
Puse el ID para los recien iniciados en javascript, pero gracias por tur respuesta.
__________________
Diseño Web - Arisman Web

Última edición por manuparquegiralda; 17/11/2013 a las 12:46

Etiquetas: textarea
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:54.