2011-06-01 3 views
1

Je me demande comment ajouter une nouvelle ligne/ligne à textarea pendant l'édition c'est quand le nombre de lettres dépasse le nombre de cols de la zone de texte ajouter automatiquement une nouvelle ligne.ajouter une nouvelle ligne à l'entrée textarea lors de l'édition

+2

Pour être honnête, je ne le ferais pas. Quand arrêtez-vous d'ajouter de nouvelles lignes? Après 5? dix? Quand il prend la moitié de la page? Je vous recommande de définir une largeur et une hauteur raisonnables, et de permettre à la zone de texte d'implémenter le défilement comme les utilisateurs l'attendront. Cependant, si vous avez une bonne raison, alors il devrait être assez simple de garder un œil sur le nombre de caractères via l'événement keyarea de textarea ou similaire et de changer l'attribut rows en cas de besoin. – dartacus

+0

Notez également que les nouveaux navigateurs (FF4, Chrome) permettent de redimensionner les zones de texte en faisant glisser le coin inférieur droit. – Xion

+0

aha mais je ne veux pas que l'utilisateur contrôle la taille de la zone de texte, en plus je ne veux pas qu'il fasse défiler juste faire son commentaire et se sentir tout est ok pendant qu'il édite – sam

Répondre

2

Une partie du code de base pour y parvenir, testé dans ce jsFiddle (http://jsfiddle.net/NZbZn/). Il aura besoin de travail, évidemment, mais montre le concept de base.

jQuery(document).ready(function(){ 

    //after typing occurs 
    jQuery('textarea#expander').keyup(function(){ 

     //figure out how many chars 
     var length = jQuery(this).val().length; 

     //if more than 10 
     if(length > 10){ 

      //if the modulus 10 of the length is zero, there are a multiple of 10 chars, so we need to extend by a row 
      //(NOTE the obvious problem - this will expand while deleting chars too!) 
      if((length % 10) == 0){ 

       //figure out the number of rows, increment by one, and reset rows attrib 
       var rows = jQuery(this).attr('rows'); 
       rows++; 

       jQuery(this).attr('rows', rows);  
      } 
     } 
    });  
}); 

Encore une fois cependant, considérons les implications de l'interface utilisateur en premier.

+0

merci beaucoup :) j'ai pris le plugin jquery ça aide beaucoup après les modifications :) – sam

1

Vous pouvez faire quelque chose comme ceci:

<textarea id="ta" onkeyup="checkScroll(this)" style="height:4em; overflow:auto"> 
asdf 
</textarea> 

<script> 
function checkScroll(obj) { 
    if(obj.clientHeight < obj.scrollHeight) { 
    obj.style.height = (parseInt(obj.style.height)+1) + 'em'; 
    } 
} 
</script> 

Et vous pouvez ajouter une limite de hauteur dans le « si » état si vous voulez.

(. Ne vous inquiétez pas de faire ce discret - il suffit d'obtenir le point à travers)

0

essayer

var txt = $ ("# textarea idhere");
txt.val (txt.val() + "\ nQuelque chose ici \ n \ nAgain");

0
$('textarea').keyup(function (e) { 
    var rows = $(this).val().split("\n"); 
    $(this).prop('rows', rows.length); 
}); 
Questions connexes