Je voudrais avoir une fonctionnalité par laquelle si j'écris
<textarea maxlength="50"></textarea>
<textarea maxlength="150"></textarea>
<textarea maxlength="250"></textarea>
il imposera automatiquement la longueur maximale au textArea. Si possible, veuillez ne pas fournir la solution dans jQuery.
Remarque: cela peut être fait si je fais quelque chose comme ceci:
<textarea onkeypress="return imposeMaxLength(event, this, 110);" rows="4" cols="50">
function imposeMaxLength(Event, Object, MaxLen)
{
return (Object.value.length <= MaxLen)||(Event.keyCode == 8 ||Event.keyCode==46||(Event.keyCode>=35&&Event.keyCode<=40))
}
Copié depuis Quelle est la meilleure façon d'émuler un attribut «maxlength» d'entrée HTML sur une zone de texte HTML?
Mais le fait est que je ne veux pas écrire onKeyPress et onKeyUp chaque fois que je déclare un textArea.
javascript
html
textarea
Rakesh Juyal
la source
la source
Réponses:
la source
onblur
ne gérera pas la pâte jusqu'à ce que l'utilisateur clique hors de la zone de texte.onkeyup
ne gérera pas le collage s'il est effectué via un menu contextuel ou un menu du navigateur. Cette approche fonctionne si vous n'avez pas besoin de filtrer pour coller. Voir cette réponse pour une approche basée sur la minuterie stackoverflow.com/a/10390626/1026459Je sais que vous voulez éviter jQuery, mais comme la solution nécessite JavaScript, cette solution (utilisant jQuery 1.4) est la plus solide et la plus robuste.
Inspiré par, mais une amélioration par rapport à la réponse de Dana Woodman:
Les changements par rapport à cette réponse sont: Simplifié et plus générique, en utilisant jQuery.live et en ne définissant pas val si la longueur est OK (conduit au fonctionnement des touches fléchées dans IE et à une accélération notable dans IE):
EDIT: version mise à jour pour jQuery 1.7+ , en utilisant
on
au lieu delive
la source
Mise à jour Utilisez la solution d'Eirik à la
.live()
place car elle est un peu plus robuste.Même si vous vouliez une solution qui n'utilisait pas jQuery, j'ai pensé en ajouter une pour quiconque trouve cette page via Google et recherche une solution jQuery-esque:
J'espère que cela vous sera utile, les Googleurs ...
la source
HTML5 ajoute un
maxlength
attribut à l'textarea
élément, comme ceci:Ceci est actuellement pris en charge dans Chrome 13, FF 5 et Safari 5. Sans surprise, cela n'est pas pris en charge dans IE 9. (Testé sur Win 7)
la source
Cette solution évite le problème dans IE où le dernier caractère est supprimé lorsqu'un caractère au milieu du texte est ajouté. Cela fonctionne également très bien avec d'autres navigateurs.
Ma validation de formulaire traite alors tous les problèmes où l'utilisateur peut avoir collé (cela ne semble être un problème que dans IE) du texte dépassant la longueur maximale de la zone de texte.
la source
C'est un code modifié que je viens d'utiliser sur mon site. Il est amélioré pour afficher le nombre de caractères restants à l'utilisateur.
(Désolé encore pour OP qui n'a pas demandé de jQuery. Mais sérieusement, qui n'utilise pas jQuery de nos jours?)
N'a PAS été testé avec des caractères internationaux multi-octets, donc je ne sais pas comment cela fonctionne exactement avec ceux-ci.
la source
Ajoutez également l'événement suivant pour gérer le collage dans la zone de texte:
la source
à partir de l' attribut HTML maxlength w3schools.com
Pour IE8 ou les versions antérieures, vous devez utiliser les éléments suivants
PS
à partir de l' attribut HTML maxlength w3schools.com
la source
Meilleure solution par rapport à la réduction de la valeur de la zone de texte.
la source
Vous pouvez utiliser jQuery pour le rendre simple et clair
DÉMO JSFiddle
Il est testé dans
Firefox
,Google Chrome
etOpera
la source
text
soit rempli avec la "valeur" du texarea avant qu'il n'ait été mis à jour. Cela signifie que votre test devrait êtreif( text.length +1 > maxlength) {return false;}
. Sinon, on ne pourrait mettre que desmaxlength - 1
caractères à l'intérieur:/
if(text.length+1 > maxlength)
ouif(text.length >= maxlength)
...Le petit problème avec le code ci-dessus est que val () ne déclenche pas l'événement change (), donc si vous utilisez backbone.js (ou un autre framework pour la liaison de modèle), le modèle ne sera pas mis à jour.
Je poste la solution a très bien fonctionné pour moi.
la source
J'ai implémenté un
maxlength
comportementtextarea
récemment et j'ai rencontré un problème décrit dans cette question: Chrome compte des caractères erronés dans la zone de texte avec l'attribut maxlength .Donc, toutes les implémentations listées ici fonctionneront peu de bugs. Pour résoudre ce problème, j'ajoute
.replace(/(\r\n|\n|\r)/g, "11")
avant.length
. Et gardé cela à l'esprit lors de la coupe de ficelle.J'ai terminé avec quelque chose comme ça:
Je ne sais pas si cela résout complètement le problème, mais cela fonctionne pour moi pour le moment.
la source
Essayez ce jQuery qui fonctionne dans IE9, FF, Chrome et fournit un compte à rebours aux utilisateurs:
la source
Essayez d'utiliser cet exemple de code:
la source
C'est beaucoup plus simple:
la source
maxlength
car vous pouvez coller des chaînes plus longues que la longueur souhaitée.