[Javascript] Problème de champs, tabulations

Résolu/Fermé
HostOfSeraphim Messages postés 6750 Date d'inscription jeudi 2 février 2006 Statut Contributeur Dernière intervention 31 juillet 2016 - 8 oct. 2009 à 20:21
 baramogo99 - 20 nov. 2009 à 18:19
Bonsoir,

Un petit problème que je n'ai pas réussi à résoudre cet après-midi.

Je cherche à faire en sorte que l'utilisateur ne soit pas obligé d'utiliser la tabulation ou sa souris pour remplir les 3 champs d'une date (jour, mois, année). J'ai donc prévu une fonction pour que le focus change dès que 2 caractères sont entrés dans le champ.

Seulement voilà, je souhaiterais également que dans le cas où l'utilisateur souhaite apporter une modification à ses valeurs (sans tout effacer), ce système soit capable de modifier certaines valeurs seulement, en les sélectionnant.

Voici ce que j'ai pour le moment :

<html>
<head>
</head>
<body>
<script language="Javascript">
function ChampSuivant(actuel, suivant, limite)
{
	if (actuel.value.length == limite) 
	{
			suivant.focus();
	}
}
</script>
<form name="form">
<input type="text" name="champ1" size=2 maxlength=2 onKeyUp="ChampSuivant(champ1,champ2,2)"> / 
<input type="text" name="champ2" size=2 maxlength=2 onKeyUp="ChampSuivant(champ2,champ3,2)"> / 
<input type="text" name="champ3" size=2 maxlength=2 onKeyUp="ChampSuivant(champ3,champ4,2)">
<br/>
<input type="text" name="champ4" size=2 maxlength=2 onKeyUp="ChampSuivant(champ4,champ5,2)"> / 
<input type="text" name="champ5" size=2 maxlength=2 onKeyUp="ChampSuivant(champ5,champ6,2)"> / 
<input type="text" name="champ6" size=2 maxlength=2>
</form>
</body>
</html>


Essayez de remplir les champs, et revenez dans le premier champ pour apporter des modifications : le focus "saute" le champ suivant et se place un champ trop loin.

Quelqu'un saurait-il m'indiquer ce que je fais de mal ? Je ne vois pas la logique qui fait que le focus aille trop loin dans ce cas.

Merci !



A voir également:

2 réponses

HostOfSeraphim Messages postés 6750 Date d'inscription jeudi 2 février 2006 Statut Contributeur Dernière intervention 31 juillet 2016 1 608
9 oct. 2009 à 13:43
Solution trouvée :

<html>
<head>
</head>
<body>
<script language="Javascript">
var cpt = 0;
function ChampSuivant(actuel, suivant, limite)
{
	cpt++;
	if (cpt == limite) 
	{ 
		suivant.select(); 
		cpt = 0;
	}	
}
</script>
<form name="form">
<input type="text" name="champ1" size=2 maxlength=2 onKeyUp="ChampSuivant(champ1,champ2,2)"> / 
<input type="text" name="champ2" size=2 maxlength=2 onKeyUp="ChampSuivant(champ2,champ3,2)"> / 
<input type="text" name="champ3" size=2 maxlength=2 onKeyUp="ChampSuivant(champ3,champ4,2)">
<br/>
<input type="text" name="champ4" size=2 maxlength=2 onKeyUp="ChampSuivant(champ4,champ5,2)"> / 
<input type="text" name="champ5" size=2 maxlength=2 onKeyUp="ChampSuivant(champ5,champ6,2)"> / 
<input type="text" name="champ6" size=2 maxlength=2>
</form>
</body>
</html>


Le problème se produisait lors d'une frappe rapide, suffisamment rapide pour que le onKeyUp réagisse trop tard. De cette manière, comme c'est le onKeyUp qui incrémente le compteur, le changement de focus ne peut se faire tant qu'il n'est pas "revenu".


2
En améliorer:
avec un appel de cette fonction du type : onkeypress="sauterchamp(this);" dans un input.

function sauterchamp(element){
if(element.value.length>=element.maxLength){
numchampsuivant=Number(element.name.substr(element.name.length-1));
nomchampsuivant=element.name.substr(0,element.name.length-1);
numchampsuivant++;
nomchampsuivant+=numchampsuivant;
eval("document.ficheparticipant."+nomchampsuivant+".focus()");
}
}

A NOTER QU'IL FAUT QUE LES NOMS DES INPUT AIENT UN TRONC COMMUN ET UN CHIFFRE QUI SE SUIT.
EXEMPLE: champ1 | champ2 | champ 3 etc...
CODE VALABLE JUSQU'A 10 CHAMPS. SINON A MODIFIER.
0