Comment sauter des champs en utilisant javascript?
-
09-06-2019 - |
Question
J'ai un formulaire comme celui-ci:
<form name="mine">
<input type=text name=one>
<input type=text name=two>
<input type=text name=three>
</form>
Lorsque l'utilisateur tape une valeur dans "un", je souhaite parfois ignorer le champ "deux", en fonction de ce qu'il a saisi. Par exemple, si l'utilisateur tape '123' et utilise la tabulation pour passer au champ suivant, je souhaite le ignorer et accéder au champ trois.
J'ai essayé d'utiliser OnBlur
et OnEnter
, sans succès.
Essayez 1:
<form name="mine">
<input type=text name=one onBlur="if (document.mine.one.value='123') document.three.focus();>
<input type=text name=two>
<input type=text name=three>
</form>
Essayez 2:
<form name="mine">
<input type=text name=one>
<input type=text name=two onEnter="if (document.mine.one.value='123') document.three.focus();>
<input type=text name=three>
</form>
mais aucune de ces œuvres. On dirait que le navigateur ne vous permet pas de gâcher la mise au point alors que celle-ci change.
BTW, tout cela a été essayé avec Firefox sous Linux.
La solution
Essayez d'attacher l'attribut tabindex à vos éléments puis par programme (changez-le en javaScript):
<INPUT tabindex="3" type="submit" name="mySubmit">
Autres conseils
Vous pouvez utiliser l'événement onfocus sur le champ deux, qui sera appelé lorsque il reçoit le focus. À ce stade, la valeur du champ 1 doit être mise à jour et vous pouvez alors effectuer votre vérification.
Si vous utilisiez la méthode que vous décrivez et que celle-ci fonctionnait, le focus serait également modifié lorsque l'utilisateur clique sur le champ au lieu de le tabuler. Je peux vous garantir que cela créerait un utilisateur frustré. (Pourquoi est-ce que ça ne marche pas, ça me dépasse.)
À la place, comme indiqué précédemment, modifiez le tabindex des champs appropriés dès que le contenu du champ 1 est modifié.
<form name="mine">
<input type="text" name="one" onkeypress="if (mine.one.value == '123') mine.three.focus();" />
<input type="text" name="two">
<input type="text" name="three">
</form>
Essayez onkeypress
au lieu de onblur
. De plus, sur le onfocus
du champ deux, vous devriez envoyer le message à trois. Je suppose que vous ne voulez pas qu’ils en tapent deux si l’un est 123, vous pouvez donc vérifier que sur deux onfocus
et les envoyer à trois.