Foros del Web » Programando para Internet » Javascript »

textarea extensible

Estas en el tema de textarea extensible en el foro de Javascript en Foros del Web. Hola: En primer lugar pedir disculpas por no ser ducho en javascript. Estoy intentado hacer script para ampliar las filas de un textarea, en función ...
  #1 (permalink)  
Antiguo 09/10/2009, 12:17
 
Fecha de Ingreso: enero-2008
Mensajes: 303
Antigüedad: 16 años, 3 meses
Puntos: 0
textarea extensible

Hola:
En primer lugar pedir disculpas por no ser ducho en javascript.

Estoy intentado hacer script para ampliar las filas de un textarea, en función del texto introducido, sin que el cliente tenga que usar el scroll (que pondré en heeden), y asi poder ver el contenido completo.

Hasta ahora he conseguido que cada 10 caraceteres o uno del key 13 me incremente una fila.

PERO NECESITO:

1.- QUE NO ME SUME LA TECLA 13 COMO UN CARACTER.
2.- QUE UNA VEZ QUE HA CONTADO LOS DIEZ PRIMEROS, CADA CARACTER nuevo ME SUMA UNA FILA MAS, y lo que quiero es que espera a otros diez.
¿Podeís ayudarme?
Muchas gracias y un saludo.

Código HTML:
<textarea cols="53" rows="10" class="input" id="comentarios"style="overflow:hidden;" tabindex="5" onblur="checkRequired('comentarios');"></textarea>
<textarea name="textarea" cols="10" rows="1" onkeydown="var key=window.event.keyCode;
if ((key==13) || (this.value.length >9))
{this.rows+=1 }
"></textarea> 
  #2 (permalink)  
Antiguo 09/10/2009, 12:55
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: textarea extensible

Hola

Prueba con esto

Código javascript:
Ver original
  1. <html>
  2. <head>
  3. <script type="text/javascript">
  4. var nuevaFila = {
  5.  
  6. Evento: function (elemento,nomevento,funcion) {
  7.   if (elemento.attachEvent)
  8.   {
  9.       var f=function(){
  10.         funcion.call(elemento,window.event);
  11.     }
  12.     elemento.attachEvent('on'+nomevento,f);
  13.     return true;
  14.   }
  15.   else  
  16.     if (elemento.addEventListener)
  17.     {
  18.       elemento.addEventListener(nomevento,funcion,false);
  19.       return true;
  20.     }
  21.     else
  22.       return false;
  23. },
  24.  
  25.  
  26.  
  27. init: function(){
  28. var elem = document.getElementById("txt");
  29.         nuevaFila.Evento(elem, 'keyup', nuevaFila.CreaFila);
  30.     },
  31.  
  32.  
  33. CreaFila: function (ev) {
  34. var keyCode = document.layers ? ev.which : document.all ? event.keyCode : document.getElementById ? ev.keyCode : 0;
  35. var elem = document.getElementById("txt");
  36. var caracteres = elem.rows * 10;
  37.  
  38. if (keyCode == 8) {
  39. if (elem.value.length < (caracteres-10)) {
  40. elem.rows-= 1
  41. }
  42. }
  43. else if (elem.value.length < 9) {
  44. elem.rows = 1
  45. } else if (elem.value.length == caracteres) {
  46. elem.rows+= 1
  47. }
  48. }
  49. }
  50. nuevaFila.Evento(window, 'load', nuevaFila.init);
  51. </script>
  52. </head>
  53. <body>
  54. <textarea name="txt" id="txt" cols="10" rows="1"></textarea>
  55. </body>
  56. <html>

En cuanto al salto de linea no se me ocurre nada, de hecho no se si se puede hacer lo que pretendes

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />

Última edición por Adler; 09/10/2009 a las 13:31 Razón: Al quitar caracteres, quitar filas
  #3 (permalink)  
Antiguo 09/10/2009, 13:32
Avatar de josec89  
Fecha de Ingreso: octubre-2009
Mensajes: 12
Antigüedad: 14 años, 7 meses
Puntos: 0
Sonrisa Respuesta: textarea extensible

Buenas!

Cita:
1.- QUE NO ME SUME LA TECLA 13 COMO UN CARACTER.
2.- QUE UNA VEZ QUE HA CONTADO LOS DIEZ PRIMEROS, CADA CARACTER nuevo ME SUMA UNA FILA MAS, y lo que quiero es que espera a otros diez.
1- Como Js reconoce la tecla 13 (supongo que es un salto de línea) como un carácter más, no puedes eliminarlo tan fácilmente. Se me ocurre que podrías usar un contador de carácteres

2- Un módulo es la mejor opción, creo yo:


Código:
<textarea cols="53" rows="10" class="input" id="comentarios"style="overflow:hidden;" tabindex="5" onblur="checkRequired('comentarios');"></textarea>
<textarea id="textarea1" name="textarea" cols="10" rows="1"></textarea>

<script type="text/javascript">
   
    window.onload = function()
        {
            var txth = new textareaHandler;
            document.getElementById("textarea1").onkeydown = function(event) { txth.add(event) };
        }


    function textareaHandler()
    {
        this.chars = 0;
    }

    textareaHandler.prototype =
    {
        add: function(ev)
        {
            var event = false;
       
            if(window.event)
                event = window.event;
            else
                event = ev;

            if(event)
            {
                alert(event.keyCode);
                if(event.keyCode != 13 && event.keyCode != 8 && event.keyCode != 46)
                    this.chars++;
                else if(event.keyCode == 13)
                    event.target.rows++;
               
                if(this.chars % 10 == 9)
                    event.target.rows++;
            }
        }
    };

</script>

Con esto sumas una row siempre que la tecla no sea ni ENTER ni BORRAR ni SUPRIMIR. Además se cumplen las condiciones de cada 10 chars :)
Espero que te sirva de ayuda, un saludo!
  #4 (permalink)  
Antiguo 09/10/2009, 13:52
 
Fecha de Ingreso: enero-2008
Mensajes: 303
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: textarea extensible

Gracias Josec:
Me da un error "target es nulo o no es un objeto".
Gracias
  #5 (permalink)  
Antiguo 09/10/2009, 14:17
Avatar de josec89  
Fecha de Ingreso: octubre-2009
Mensajes: 12
Antigüedad: 14 años, 7 meses
Puntos: 0
Sonrisa Respuesta: textarea extensible

ups!
El código no es compatible con el IE ... era de esperar, cámbialo por éste ^^. De paso quito el alert que era para hacer pruebas jaja

Código:
<textarea cols="53" rows="10" class="input" id="comentarios"style="overflow:hidden;" tabindex="5" onblur="checkRequired('comentarios');"></textarea>
<textarea id="textarea1" name="textarea" cols="10" rows="1"></textarea>

<script type="text/javascript">
   
    window.onload = function()
        {
            var txth = new textareaHandler;
            document.getElementById("textarea1").onkeydown = function(event) { txth.add(event) };
        }


    function textareaHandler()
    {
        this.chars = 0;
    }

    textareaHandler.prototype =
    {
        add: function(ev)
        {
            var event = false;
            var target = false;
       
            if(window.event)
                event = window.event;
            else
                event = ev;

            if(event)
            {
                if(event.target)
                    target = event.target;
                else
                    target = event.srcElement;

                if(event.keyCode != 13 && event.keyCode != 8 && event.keyCode != 46)
                    this.chars++;
                else if(event.keyCode == 13)
                    target.rows++;
               
                if(this.chars % 10 == 9)
                    target.rows++;
            }
        }
    };

</script>
Este código es compatible con los navegadores más comunes.

>Opera no hace salto de línea cuando llegas al máximo de filas, pero eso es que es un navegador que va muy a su bola (como IE).

Espero que te sirva ahora, un saludo ^^
  #6 (permalink)  
Antiguo 09/10/2009, 15:32
 
Fecha de Ingreso: enero-2008
Mensajes: 303
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: textarea extensible

Gracias Josec.
Funciona bien. Muchas gracias y un saludo.
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:25.