Focus sur champ d'1 page à partir d'un lien d'1 autre page

Avatar du membre
ViPHP
ViPHP | 3008 Messages

28 août 2006, 13:45

Bonjour !

J'ai une page qui contient mon formulaire. Un fois validé, redirection sur une autre page de vérification. S'il y a une erreur, je met un message "erreur, cliquez ici pour revenir sur le formulaire".

Je voudrais faire un focus sur le champ qui a une erreur à partir de ce lien. J'ai essayé

Code : Tout sélectionner

<a href="page.php#ancre_sur_mauvais_champ" onclick="javascript:document.forms['nom_form'].elements['nom_champ'].focus()">
Mais je pense que ce n'est pas ça...j'ai dû louper quelque chose dans le lot. Pouvez-vous m'aider ?

Merci !
Modifié en dernier par charabia le 28 août 2006, 15:15, modifié 1 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

28 août 2006, 14:23

Si j'ai bien compris, tu reviens sur ton formulaire depuis ta page de validation via un lien, tu recharges donc la page. C'est donc sur la page du formulaire qu'il faut exécuté ton javascript pour mettre le focus sur un champ particulier et non sur la page où se trouve le lien.

Il te suffit de passer en paramère les infos sur le champ concerné et au chargement de ta page, après l'affichage du formulaire d'ajouter un

Code : Tout sélectionner

<script> document.nom_form.nom_champ.focus(); </script>
Si j'ai mal compris et que c'est sur la même page, y a un p'tit soucis au niveau des guillemet/apostrophe dans ton code pour fermer l'attribut href. (ouvert avec " fermé avec ' )

Si ca ne change rien, essaye peut être de tout mettre en js dans le href :

Code : Tout sélectionner

<a href="javascript:document.location='page.php#ancre_sur_mauvais_champ'; document.forms['nom_form'].elements['nom_champ'].focus();">

Mammouth du PHP | 19672 Messages

28 août 2006, 14:30

Code : Tout sélectionner

<a href="page.php#ancre_sur_mauvais_champ' onclick="javascript:document.forms['nom_form'].elements['nom_champ'].focus()">
Attention, cette formulation implique que tes balises <form> et <input> soient assorties d'un attribut "id" correpondant à l'index sur lequel pointe le script.

Donc, là, on devrait avoir:

Code : Tout sélectionner

<form id="nom_form"...> ... <input type="text" id="nom_champ" name="nom_champ".../> ...
Attention aussi à un détail si tu fais ça en XHTML : pas d'attribut "name" dans la balise form. Les éléments input peuvent avoir à la fois un "name" et un "id", mais la valeur de "id" ne peut apparaître qu'une seule fois dans la page html complète.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
ViPHP
ViPHP | 3008 Messages

28 août 2006, 15:13

Oui c'est bien ça Ryle, ce sont bien deux pages différentes.

Si je rajoute ton code

Code : Tout sélectionner

<script> document.nom_form.nom_champ.focus(); </script>
ça marche en effet pour un champ donné.

Mais je voudrais faire ça pour X champs. Par exemple si le login n'est pas bon je redirige vers le formulaire au niveau du login+focus, idem pour le pass...etc Dans ce cas je ne peux pas mettre le script que tu m'as fourni.
A moins de passer une variable en URL pour chaque champ et de tester pour affichage ou pas, c'est ça que tu voulais me dire ?

Le tit pb de quote c'est en recopiant, mais c'est bon sur mon code :)

Cyrano, j'ai changé comme tu l'as dit, ne mettre que l'ID dans le form, mais ça ne marche hélas toujours pas.
Modifié en dernier par charabia le 28 août 2006, 15:20, modifié 1 fois.

Mammouth du PHP | 19672 Messages

28 août 2006, 15:20

Comment envoies-tu les paramètres qui mettent le focus sur la page formulaire depuis la page de validation ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
ViPHP
ViPHP | 3008 Messages

28 août 2006, 15:23

Comment envoies-tu les paramètres qui mettent le focus sur la page formulaire depuis la page de validation ?
Justement c'est la question que je me posais lol

En fait il faut que je passe en URL une variable identifiant chaque champ et faire des tests sur ma page formulaire pour voir si j'affiche le focus ou pas si je comprend bien ?

Je pensais qu'on pouvait faire reconnaître directement un champs à partir du lien en question.

Je pensais justement qu'en faisant :

Code : Tout sélectionner

document.forms['joueur'].elements['login'].focus()
il reconnaîtrait automatiquement le formulaire joueur de l'autre page et le champ login et qu'il ferait un focus tout seul.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

28 août 2006, 15:25

Mais je voudrais faire ça pour X champs.
Euh......... tu voudrais mettre le focus sur X champ en même temps ?
ou tu veux mettre le focus sur le premier champ mal rempli ? :)

Dans le premier cas... ben c'est pas possible de toute façon :) (bon.. ça, c'est fait.. ;))
Dans le second, il te suffit de passer en paramètre le nom du champ sur lequel tu veux mettre le focus dans ton lien nan ?
<a href="page.php?field=<?php echo $nom_champ_qu_est_pas_bon; ?>#ancre_sur_mauvais_champ">
et
<script> 
document.nom_form.<?php echo $_GET['field'];?>.focus(); 
</script>

Mammouth du PHP | 19672 Messages

28 août 2006, 15:28

Piste de solution : au début de ta page formulaire, définis une variable de session $_SESSION['erreur_js'] par exemple.

Si cette variable est vide, tu affiches le formulaire normalement.

Seconde étape, la page de validation : et là, une erreur est relevée : dans les actions, définis la variable en lui donnant comme valeur l'identifiant du champ qui comporte une erreur. Ton formulaire va se recharger, mais cette fois, ta variable de session comporte une valeur : ajoute alors dynamiquement un évènement onload dans la balise body appelant une fonction JavaScript qui va mettre le focus dans le champ qui doit être repris.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
ViPHP
ViPHP | 3008 Messages

28 août 2006, 15:34

oki merci beaucoup ;)