Foros del Web » Programando para Internet » Javascript »

Agrandar TextArea

Estas en el tema de Agrandar TextArea en el foro de Javascript en Foros del Web. Hola. Los textarea me llevan por el camino de la amargura... Con este código, si se hace un salto de línea, el textarea se hace ...
  #1 (permalink)  
Antiguo 27/12/2009, 08:42
 
Fecha de Ingreso: marzo-2008
Mensajes: 383
Antigüedad: 16 años, 1 mes
Puntos: 5
Agrandar TextArea

Hola. Los textarea me llevan por el camino de la amargura...

Con este código, si se hace un salto de línea, el textarea se hace más grande (+1 rows). Hasta aquí todo perfecto. El problema está en que cuando escribo una frase tan larga que una linea no cabe, salta la segunda fila, hace "un salto de linea" y no sé como detectar eso.

Sólo puedo detectar los saltos de linea hechos con el intro: lineas=area.split('\n');

Pero como puedo detectar un salto de linea solo escribiendo texto?

Os pongo un enlace con un ejemplo.
http://www.unwrongest.com/projects/elastic/

Más abajo está mi codigo.
P.D. No quiero recurrir a un código ya hecho como el del ejemplo.


Código Javascript:
Ver original
  1. function agrandar(e){      
  2.            
  3. var code = (document.all) ? event.keyCode:e.which;
  4. var ctrl = (document.all) ? event.ctrlKey:e.modifiers & Event.CONTROL_MASK;
  5.                    
  6. var k=null;
  7. (e.keyCode) ? k=e.keyCode : k=e.which;
  8. area=document.forms['formulario'].TAestado.value;
  9. lineas=area.split('\n');
  10.            
  11. for(i in lineas){
  12.     var ubound=i;
  13. }      
  14.            
  15. ubound=new Number(ubound)+1;
  16. if (ubound>10){
  17.     document.forms['formulario'].TAestado.rows=10;
  18.     document.getElementById('TAestado').className="TAestadoMax";
  19. }else{
  20. if(k==13 ){            
  21.                
  22.     document.forms['formulario'].TAestado.rows
  23.         document.forms['formulario'].TAestado.rows +1; 
  24. }
  25. else
  26. {
  27.     document.forms['formulario'].TAestado.rows=ubound;
  28.     document.getElementById('TAestado').className="TAestadoNor";
  29. }                  
  30. }
  31. if (ubound==1){
  32. document.forms['formulario'].TAestado.rows=2;
  33. }                      
  34. }


Código HTML:
Ver original
  1. <textarea  style="width:700px" rows="1" Id="TAestado" onkeydown="agrandar(event)" >¿En qué piensas?</textarea>
  #2 (permalink)  
Antiguo 27/12/2009, 08:50
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 14 años, 5 meses
Puntos: 65
Respuesta: Agrandar TextArea

Y si preguntas por la cantidad de caracteres que hay en una linea? Y si son igual al maximo permitido que agregue una fila mas...
__________________
HV Studio
Diseño y desarrollo web
  #3 (permalink)  
Antiguo 27/12/2009, 08:57
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Agrandar TextArea

Esto puede ayudarte: http://www.disegnocentell.com.ar/notas2.php?id=232
Aclaro, por si acaso: la idea sería crear un elemento oculto auxiliar que te ayude a determinar la cantidad de renglones escritos en el textarea (una capa oculta con position absolute y left:-1500px, por ejemplo y el mismo ancho (offsetWidth) que el textarea).

Última edición por Panino5001; 27/12/2009 a las 09:05
  #4 (permalink)  
Antiguo 27/12/2009, 09:02
 
Fecha de Ingreso: marzo-2008
Mensajes: 383
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Agrandar TextArea

jackson666, probé de hacerlo así pero el ancho de cada caracter es diferente y una línea nunca tendría en mismo número de caracteres que las demás, a no ser que use un tipo de letra como la del bloc de notas, pero queda feo...

Panino, ahora miro el ejemplo y a ver si puedo adaptarlo e mis necesidades.

Gracias
  #5 (permalink)  
Antiguo 27/12/2009, 09:07
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Agrandar TextArea

Ojo, ahí hice alguna aclaración a mi anterior mensaje para que veas que no podrás usar esa técnica directamente sino adaptándola.
  #6 (permalink)  
Antiguo 27/12/2009, 09:40
 
Fecha de Ingreso: marzo-2008
Mensajes: 383
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Agrandar TextArea

por más que lo mire, no veo que puedo sacar para usarlo en lo que quiero conseguir. En ese ejemplo muestra solo 5 lineas de un texto con muchas más lineas, pero el ancho del objeto ya está definido.

No existe en JS alguna función que obtenga una fila en concreto? Algo como esto:
document.forms['formulario'].textarea.row[0].value);
document.forms['formulario'].textarea.row[0].length);
  #7 (permalink)  
Antiguo 27/12/2009, 17:41
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Agrandar TextArea

Bueno, no importa en realidad. Estuve viendo que sería más sencillo hacerlo así, si es que entendí bien lo que necesitás:
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<
title>Documento sin t&iacute;tulo</title>
<
script>
function 
verificar(o){
    if(
o.scrollHeight>o.clientHeight)o.rows+=1;
}
</script>
</head>

<body>
<form id="form1" name="form1" method="post" action="">
  <textarea style="overflow-x:hidden;overflow:hidden;" onkeydown="verificar(this)" name="textarea" rows="5" id="textarea"></textarea>
</form>
</body>
</html> 
  #8 (permalink)  
Antiguo 28/12/2009, 14:01
 
Fecha de Ingreso: marzo-2008
Mensajes: 383
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Agrandar TextArea

Esto funciona siempre y cuando se escriben lineas, pero cuando se borra texto el alto del textarea no disminuye. Intento usar este codigo tuyo con el mio pero no funciona bien, me hago un lio.

sabes como poder hacerlo?

Gracias
  #9 (permalink)  
Antiguo 29/12/2009, 02:25
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Agrandar TextArea

Probá de esta manera:
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
<
html xmlns="http://www.w3.org/1999/xhtml"
<
head
<
meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<
title>Documento sin t&iacute;tulo</title
<
script
function 
verificar(o){ 
    var 
s=o.value.split('\n').length;
    
o.rows=(o.value.length/o.cols)+s;

onload=function(){
    
setInterval(function(){verificar(document.getElementById('textarea'));},30);
}
</script> 
</head> 

<body> 
<form id="form1" name="form1" method="post" action=""> 
  <textarea style="overflow-x:hidden;overflow:hidden;" name="textarea" cols="20" rows="5" id="textarea"></textarea> 
</form> 
</body> 
</html> 

Última edición por Panino5001; 29/12/2009 a las 02:34
  #10 (permalink)  
Antiguo 29/12/2009, 10:51
 
Fecha de Ingreso: marzo-2008
Mensajes: 383
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Agrandar TextArea

No funciona bien del todo. Ocurre el mismo problema que me pasa a mi.
con "o.value.length" está cogiendo el valor del textarea desde el primer caracter hasta el último.

Todo el problema sucede cuando se escribe una palabra que no cabe en la fila en la que uno está situado y salta a la siguiente.
  #11 (permalink)  
Antiguo 29/12/2009, 11:13
 
Fecha de Ingreso: marzo-2008
Mensajes: 383
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Agrandar TextArea

Respuesta encontrada!!!! en este mismo foro

http://www.forosdelweb.com/f13/conta...xtarea-249811/

respuesta numero 5.

Por fin!!! Gracias ForosDelWeb!!!
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 06:26.