Page 1 sur 2
Bloquer la saisie d'un textarea
Posté : 29 mai 2006, 11:53
par zeus
Bonjour à tous,
Je doit bloquer la taille d'un textarea à 400 caractères.
Pour des raisons de présentations, je suis obligé de passer par une textarea.
Après quelques recherche sur le net, je suis tombé sur ce code :
http://www.wikistuce.info/doku.php/java ... _textearea
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.
Pour parer à cette solution, j'ai modifié la fonction de cette manière
Code : Tout sélectionner
//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, on interdit la saisie
if (field.value.length > maxlen) {
return false;
}
return true;
}
et je l'appelle de cette manière
Ce qui me permet de bloquer la saisie du caractère. Pas d'ajout, donc pas de troncature.
Mais, puisqu'il en faut un, cette solution ne me déplait pas parce qu'une fois la limite atteinte, toutes les touches sont désactivées, y compris "Del" et CTRL+x
Est-ce que quelqu'un à une astuce ou une solution à mon problème ?
Merci d'avance
Posté : 29 mai 2006, 12:21
par albat
Je n'ai pas la solution exacte en tête, mais j'ajouterais un test
pour n'interdire que les caractères (lettres, chiffres, symboles)
et non les touches de fonction ("Suppr",...)
Il te faudrait récupérer le dernier caractère saisi dans la variable
frappe
que tu passes en paramètre dans ta fonction.
function textLimit(field, maxlen, frappe)
{ // Si le nombre de caractères saisis est supérieur à la limite, on interdit la saisie
if ((field.value.length > maxlen) && (frappe.charCodeAt(0) > 41) && (frappe.charCodeAt(0) <176))
// 177 correspond à la touche "Suppr"
{ return false;
}
return true;
}
Si tu sais jouer avec les RegExp, ce peut être une autre solution...
Posté : 29 mai 2006, 12:35
par zeus
Le problème, c'est que ce textarea doit recevoir des templates HTML et qu'il peut contenir plus que les caractère alphanum
Mais je vais me renseigner sur la récupération de la dernière touche.
Posté : 29 mai 2006, 12:59
par Shrell
et si au lieu de déclencher sur le onkeydown tu déclenchais au onkeyup? au moins la dernière touche serait prise en compte
Enfin je sais pas trop, moi j'dis ça j'dis rien lol
Posté : 29 mai 2006, 13:01
par zeus
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

Posté : 29 mai 2006, 13:03
par Shrell
et onkeypress? (quoique je pense que c'est idem à onkeydown)
Posté : 29 mai 2006, 13:05
par zeus
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
Posté : 29 mai 2006, 13:07
par albat
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...

Posté : 29 mai 2006, 13:07
par sadeq
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>
Posté : 29 mai 2006, 13:07
par Ryle
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.
Posté : 29 mai 2006, 13:11
par Shrell
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
Re: Bloquer la saisie d'un textarea
Posté : 29 mai 2006, 13:15
par albat
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

Posté : 29 mai 2006, 13:39
par zeus
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

Posté : 29 mai 2006, 13:45
par albat
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...
Posté : 29 mai 2006, 13:50
par zeus
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
