2008-09-04 9 views

Répondre

19

La balise TEXTAREA ne dispose pas d'un attribut MAXLENGTH la façon dont une balise INPUT fait, du moins pas dans la plupart des navigateurs standard. Une façon très simple et efficace pour limiter le nombre de caractères qui peuvent être tapé dans une balise TEXTAREA est:

<textarea onKeyPress="return (this.value.length < 50);"></textarea> 

Note:onKeyPress, va empêcher toute pression sur le bouton, tout boutony compris la touche de retour arrière. Cela fonctionne parce que l'expression booléenne compare la longueur du champ avant que le nouveau caractère soit ajouté à la longueur maximum que vous voulez (50 dans cet exemple, utilisez le vôtre ici), et retourne vrai s'il y a de la place pour un de plus, false sinon. Renvoyer false à partir de la plupart des événements annule l'action par défaut. Ainsi, si la longueur actuelle est déjà 50 (ou plus), le gestionnaire renvoie false, l'action KeyPress est annulée et le caractère n'est pas ajouté.

Une mouche dans la pommade est la possibilité de coller dans un TEXTAREA, qui ne provoque pas l'événement KeyPress au feu, contourner ce contrôle. Internet Explorer 5+ contient un événement onPaste dont le gestionnaire peut contenir la vérification . Cependant, notez que vous devez également prendre en compte combien de caractères attendent dans le presse-papiers pour savoir si le total va à vous dépasser ou non. Heureusement, IE contient également un objet du presse-papiers à partir de l'objet fenêtre. 1 Ainsi:

<textarea onKeyPress="return (this.value.length < 50);" 
onPaste="return ((this.value.length + 
window.clipboardData.getData('Text').length) < 50);"></textarea> 

Encore une fois, l'événement onPaste et clipboardData objet sont IE 5+ uniquement. Pour une solution multi-navigateur, il vous suffira d'utiliser un gestionnaire OnChange ou OnBlur pour vérifier la longueur et la gérer comme vous le souhaitez (tronquer la valeur en silence, notifier l'utilisateur, etc.). Malheureusement, ceci n'attrape pas l'erreur comme cela se produit, seulement lorsque l'utilisateur tente de quitter le terrain, ce qui n'est pas tout à fait aussi amical.

Source

En outre, il y a une autre façon ici, y compris un script terminé, vous pouvez inclure dans votre page:

http://cf-bill.blogspot.com/2005/05/textarea-maxlength-revisited.html

+7

Notez que la fonction onKeyPress écrit ci-dessus empêchera tout texte d'être entré dans la zone de texte, une fois la limite de caractères est touché - pas de caractères peuvent être supprimés. Un extrait plus robuste permettrait à l'utilisateur d'atteindre la limite maximale, puis de revenir en arrière pour supprimer les caractères afin d'obtenir le texte sous la limite. – shek

+0

Peut-être que c'est juste moi et ma mauvaise arithmétique, mais j'ai l'impression que lors de l'utilisation de nouvelles lignes dans les textareas, IE et FF se comportent différemment de Chrome en ce qui concerne 'maxlength'. Cela a à voir avec le problème '\ r \ n' vs' \ n' (quand votre texte contient des retours à la ligne) ... Certainement, 'maxlength' ne semble pas fonctionner de manière cross-browser-ish sous Windows d'après mon expérience. .. Mais rien de nouveau ici, juste le même vieux buggy HTML/JS ... – user2173353

5

HTML5 permet désormais maxlength attribute on <textarea>.

Il est supporté par tous les navigateurs sauf IE < = 9 et iOS Safari 8.4. Voir support table on caniuse.com.

+0

@erdomester Il fonctionne sur les navigateurs pris en charge. Vous pouvez tester dans le lien w3c que j'ai fourni. – indusBull

+0

Je l'ai essayé et cela fonctionne même si j'ai utilisé maxlength = "500px". Mais le lien que vous avez fourni était inactif quand j'ai posté ce commentaire et la page qui était affichée était (je suppose) montrant d'autres attributs que celui montré maintenant. – erdomester

+3

Ce lien n'est pas au W3C, c'est W3Schools, qui est connu pour sortir des informations incorrectes. – Toby

-1
$(function(){ 
    $("#id").keypress(function() { 
    var maxlen = 100; 
if ($(this).val().length > maxlen) { 
    return false; 
} 
}) 
}); 

Référence Set maxlength in Html Textarea

Questions connexes