plusieurs compteur de caractère dans un formulaire

Eléphant du PHP | 186 Messages

29 mars 2007, 14:59

Bonjour à tous.

Je viens vers vous pour un peu d'aide car j'ai du mal avec un script permettant de compter le nombre de caractères inscrit dans un textarea.
Je l'ai récupéré sur Internet, mais étant totalement novice en javascript, j'ai quelque peu du mal à en faire ce que je veux.
Voici le code en question que je voudrais appliquer sur trois textearea différents dans un même formulaire.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Document sans titre</title>
<script type="text/javascript">
//trouvé sur: www.portugal-tchat.com//
var ns6=document.getElementById&&!document.all

function restrictinput(maxlength,e,placeholder){
if (window.event&&event.srcElement.value.length>=maxlength)
return false
else if (e.target&&e.target==eval(placeholder)&&e.target.value.length>=maxlength){
var pressedkey=/[a-zA-Z0-9\.\,\/]/ 
if (pressedkey.test(String.fromCharCode(e.which)))
e.stopPropagation()
}
}

function countlimit(maxlength,e,placeholder){
var theform=eval(placeholder)
var lengthleft=maxlength-theform.value.length
var placeholderobj=document.all? document.all[placeholder] : document.getElementById(placeholder)
if (window.event||e.target&&e.target==eval(placeholder)){
if (lengthleft<0)
theform.value=theform.value.substring(0,maxlength)
placeholderobj.innerHTML=lengthleft
}
}
//trouvé sur: www.portugal-tchat.com//

function displaylimit(thename, theid, thelimit){
var theform=theid!=""? document.getElementById(theid) : thename
var limit_text='<b><span id="'+theform.toString()+'">'+thelimit+'</span></b> characteres Maximum.'
if (document.all||ns6)
document.write(limit_text)
if (document.all){
eval(theform).onkeypress=function(){ return restrictinput(thelimit,event,theform)}
eval(theform).onkeyup=function(){ countlimit(thelimit,event,theform)}
}
else if (ns6){
document.body.addEventListener('keypress', function(event) { restrictinput(thelimit,event,theform) }, true); 
document.body.addEventListener('keyup', function(event) { countlimit(thelimit,event,theform) }, true); 
}
}

</script>
</head>

<body>
<table>
<form>
	<tr>
		<td width="50px">Truc1 </td>
		<td><textarea name="description1" id="truc1" cols=50 rows=5 class="descr_add_site_annuaire"></textarea></td>
	</tr>
	<tr>
		<td colspan="2"><script> displaylimit("","truc1",250) </script></td>
	</tr>
	<tr>
		<td width="50px">Truc2 </td>
		<td><textarea name="description2" id="truc2" cols=50 rows=8 class="descr_add_site_annuaire"></textarea></td>
	</tr>
	<tr>
		<td colspan="2"><script> displaylimit("","truc2",400) </script></td>
	</tr>
	<tr>
		<td width="50px">Truc3 </td>
		<td><textarea name="description3" id="truc3" cols=50 rows=2 class="descr_add_site_annuaire"></textarea></td>
	</tr>
	<tr>
		<td colspan="2"><script> displaylimit("","truc3",100) </script></td>
	</tr>
</form>
</table>

</body>
</html>
Si vous faites le test chez vous en recopiant ce code, vous devriez vous apercevoir de quelque chose à l'utilisation.
Lorsque vous remplissez le premier textarea, le décompte des caractères s'effectue bien (celui juste en dessous)

Par contre, si vous remplissez le second ou même le troisième textarea, le décompte ne s'effectue pas dans les script afficher juste en dessous d'eux mais toujours sur celui présent en dessous du premier textarea.

Quelqu'un pourrait il m'aider à savoir d'où cela peut-il venir?
Merci pour toute aide apportée à un pauvre newbie qui se lamente dans son coin :)

Eléphant du PHP | 186 Messages

29 mars 2007, 15:29

Je viens de trouver un script sur ce lien qui ressemble pourtant au mien mais qui semble fonctionner pour ce que je voulais. http://www.phpfrance.com/forums/voir_su ... mpteur.php
Désolé de ne pas avoir regardé plus tôt dans les archives de votre site.
Merci à celui qui a posté le message et rendu le script accessible.
Bon courage à tout le monde.