2011-11-29 24 views

Respuesta

1

Algo como esto:

<textarea id="foo" rows="1" cols="40"></textarea> 

$(function() { 

    $("#foo").on("keyup", function() { 

     if ($(this).attr('rows') < 5 && 
      parseInt($(this).val().length/$(this).attr('cols')) >= $(this).attr('rows')) 
      $(this).attr("rows", parseInt($(this).attr("rows"))+1); 

    }); 

}); 

http://jsfiddle.net/Q3pPT/

edición Ligeras mejoras para manejar los saltos de línea:

$(function() { 

    $("#foo").on("keyup", function (e) { 

     if ($(this).attr('rows') < 5) 
     { 
      if (
       parseInt($(this).val().length/$(this).attr('cols'))+ 
       ($(this).val().split("\n").length-1) 

       >= 

       $(this).attr('rows') 
      ) 
       $(this).attr("rows", parseInt($(this).attr("rows"))+1); 

      if (e.keyCode == 13) 
      { 
       $(this).attr("rows", parseInt($(this).attr("rows"))+1); 
      } 
     } 

    }); 

}); 

http://jsfiddle.net/Q3pPT/2/

+0

lo que si el usuario hace clic entran? El cuadro de texto no se expande. – codedude

+0

Sí, supongo que eso sería un problema. detalles detalles. :) –

+0

¿Es una solución fácil de permitir ingresar para expandir el área de texto? – user852974

0

Compruebe el elástico jQ uery plugin: http://unwrongest.com/projects/elastic/

Puede usar la propiedad max-height en su CSS combinada con la longitud máxima de su área de texto para limitarla a 5 líneas.

1

Tomé la idea de la respuesta de Jake Feasel y no solo funciona para expandir sino también para contratar el área de texto en caso de que haya un menor contenido.

HTML

<textarea id="foo" rows="1" cols="40"></textarea> 
<div id="stat"></div> 

También muestra el número ideal de filas requerido de acuerdo con el contenido en un div sepatate

CSS

​#foo 
{ 
resize:none;   
}​ 

Esto es necesario porque, una vez que el área de texto tiene se ha redimensionado utilizando este controlador, el código deja de funcionar

JS

$(function() { 

    $("#foo").on("keyup", function (e) {  
     var idealRows = parseInt($(this).val().length/$(this).attr('cols'))+ 
       ($(this).val().split("\n").length-1)+1 ; 
     var rows = $(this).attr('rows'); 

     // for the bugging scroll bar 
     if(rows > 4) $('#foo').css('overflow','auto') 
     else $('#foo').css('overflow','hidden') 

     // for expanding and contracting   
     if((idealRows > rows) && (rows < 5) || (idealRows < rows) && (rows > 1)) 
      $(this).attr("rows", idealRows);      

    }); 

});​ 

Demostración: http://jsfiddle.net/roopunk/xPdaP/3/

Tenga en cuenta que también se encarga de la barra de desplazamiento que aparece entre keyDown y keyUp. OMI: Es un poco molesto.

Nota Espero que esto ayude! :)

Cuestiones relacionadas