Bloquer la saisie d'un textarea

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Bloquer la saisie d'un textarea

par zeus » 29 mai 2006, 16:50

Ca y est, je m'en suis enfin sorti

Je vous remerci tous (même Albat ;) ) pour votre aide précieuse :pouce:

La fonction de base marchait très bien mais j'ai dû l'adapter pour pouvoir gérer simultanément plusieurs textarea limitée en taille

Je vous donne juste la fonction de base poutr ceux que ça interesserait ;)

Code : Tout sélectionner

<script type="text/javascript"> //Détection du navigateur pour choix de l'attribut qui permet le bon fonctionnement isIE = (document.all); if (isIE) { attribute = 'className'; } else { attribute = 'class' } //Permet de limiter la taille du texte saisi dans un textarea function textLimit(field, maxlen) { //Si le nombre de caractères saisis est supérieur à la limite if (field.value.length > maxlen) { //Changement de la couleur de fond field.setAttribute(attribute, 'bloque'); //Désactivation du bouton de soumission document.getElementById('submit_model').disabled = true; } else //Le nombre de caractères saisis est inférieur ou égal à la limite { //Activation de l'élément field.setAttribute(attribute, 'actif'); //Réactivation du bouton de soumission document.getElementById('submit_model').disabled = false; } } </script>
la feuille CSS associée

Code : Tout sélectionner

/***********************/ /* Textarea de gestion des modèles */ /***********************/ textarea.actif { background-color: #FFF; } textarea.bloque { background-color: #FA7A7A; }
et l'extrait de ma page html
<textarea name="masque" class="actif" cols="100" rows="<?= $this->countRows($this->data['masque']) ?>" onkeyUp="return textLimit(this, 4000);"><?= $this->data['masque'] ?></textarea>

par zeus » 29 mai 2006, 14:13

meuh non, rangez les hachoirs :langue:

Pour Shrell et Sadeq, c'est parce que je ne retient pas leur solutions mais que je tenais à les remercier de leur aide tout de même. Pour Ryle, c'est parce que j'était passé à côté de ton post, donc MERCI.

Et pour Albat, c'est parce que j'aime bien le taquiner, euh, non, parce que j'ai pas encore testé sa solution ;)

Essayez d'être poli, tiens. On m'y reprendra :? :langue:

par Ryle » 29 mai 2006, 14:02

J'ai compris : Ryle et moi, on peut aller mourir... [-( :langue:
J'me faisait justement la même réflexion !
Grrrr !!! A 5 secondes près, j'avais un merci !!
Sadeq je te hais !! ;)

Par contre dire à albat que c'est ça solution qui te convient le mieux et ne remercier que les autres... on en a vu se faire descendre pour moins que ça à cannes ! ;)

par albat » 29 mai 2006, 13:54

J'ai compris : Ryle et moi, on peut aller mourir... [-( :langue:

par zeus » 29 mai 2006, 13:50

Effectivement, elle me plait beaucoup.

En tout cas merci à Sadeq et à Shrell pour leurs idées. Mais ne vous éloignez pas trop, je risque d'avoir encore besoin de vous :langue:

par albat » 29 mai 2006, 13:45

La "zone rouge" enrichie d'une activation/désactivation est une solution que j'affectionne beaucoup.

Elle évite en outre de perdre trop de temps à essayer d'identifier les touches autorisées sans en oublier...

par zeus » 29 mai 2006, 13:39

Je suis en pause actuellement mais dès que mon boss est revenu, je lui parle de la zone rouge.

En ce qui concerne l'anihilation de l'action de DEL, après réflexion, je me demande si c'est pas le meilleur moyen d'oublier des touches qui sont nécessaires :-k

Re: Bloquer la saisie d'un textarea

par albat » 29 mai 2006, 13:15

Mais il ne me convient pas parce que si je saisie du texte au milieu de ce qui est saisi, il tronque la fin du texte.
[-X ;)

par Shrell » 29 mai 2006, 13:11

peut etre quelque chose de ce genre:

Code : Tout sélectionner

function textLimit(field, maxlen) { // Si le nombre de caractères saisis est supérieur à la limite, on coupe if (field.value.length > maxlen) { field.value=field.value.substr(0,maxlen); } }
et

Code : Tout sélectionner

onkeyup="textLimit(this,400);"

par Ryle » 29 mai 2006, 13:07

le problème du onKeyUp, c'est que la touche aura déjà été préssé, donc le return false arrive trop tard... la solution est peut être de passer event en parametre de ta fonction, de récupérer le code de la touche et d'ignorer ceux des delete, suppr, fleches, etc.

par sadeq » 29 mai 2006, 13:07

Ce programme js te permettra de récupèrer les codes des touches down :

Code : Tout sélectionner

<html> <body> <script type="text/javascript"> function codekey(e) { var keynum if(window.event) // IE { keynum = e.keyCode } else if(e.which) // Netscape/Firefox/Opera { keynum = e.which } alert (keynum); } </script> <form> <input type="text" onkeydown="codekey(event)" /> </form> </html>

par albat » 29 mai 2006, 13:07

Autre possibilité, qui implique davantage l'utilisateur :
Lorsque la chaîne saisie dépasse la longueur maximale autorisée,
la chaîne (ou le fond) change de couleur et passe en rouge.

Cela avertit l'utilisateur que sa saisie sera tronquée à l'enregistrement.
Charge à lui de réduire sa prose dans les limites admises.
S'il revient en deça de la longueur maximale, la couleur redevient normale. ;)

Plus intéressant encore :
Tu peux aussi faire disparaître le bouton submit quand le maximum est dépassé
et le faire réapparaître quand la longueur redevient licite. =D>

Avantage de cette solution : l'utilisateur peut toujours tripatouiller sa saisie,
faire des copier/coller (s'il veut conserver ailleurs le trop saisi), etc... :pouce:

par zeus » 29 mai 2006, 13:05

tout a Fait, le onKeyPress est pour une touche qui reste appuyée. J'ai essayé, l'un, l'autre, les deux, mais toujours pareil

par Shrell » 29 mai 2006, 13:03

et onkeypress? (quoique je pense que c'est idem à onkeydown)

par zeus » 29 mai 2006, 13:01

C'est aussi une idée qui m'a traversée l'esprit mais le problème c'est que le return false sur un onkeyUp n'a aucun effet. Je peut continuer à tapper du texte :(