bonjour
j'ai un formulaire avec plusieurs boutons submit, et j'aurais besoin de détecter dans le OnSubmit quel bouton a été cliqué ou si l'user a utilisé la touche entrée
comment faire ?
merci de votre aide
jlf
bonjour
j'ai un formulaire avec plusieurs boutons submit, et j'aurais besoin de détecter dans le OnSubmit quel bouton a été cliqué ou si l'user a utilisé la touche entrée
comment faire ?
merci de votre aide
jlf
peut etre en déclarant un variable dans le head :
et dans tes submits :
Code : Sélectionner tout - Visualiser dans une fenêtre à part var quelBouton;
Code : Sélectionner tout - Visualiser dans une fenêtre à part onclick="quelBouton=this.name;" name="moi"
il n'y a vraiment pas d'autre moyen ?peut etre en déclarant un variable dans le head :
et dans tes submits :
est-il possible sur le client d'accéder à la liste des params passés par le submit en méthode post ? (et éventuellement de modifier cette liste)
ben tu les as dans le formulaire !!
ils sont pas encore envoyés ...
Je suggère d'utiliser onsubmit="return false" dans la balise du formulaire, puis d'utiliser des inputs de type button plutôt que de type submit pour la validation avant de poster le formulaire.
Chaque input de type button appelerait une fonction différente (ou la même fonction avec un paramètre différent), la fonction déclenchant ensuite le submit...
Exemple :
Le onsubmit="return false" évite que l'événement onsubmit ne se déclenche à un autre moment que celui que l'on a choisi. Et, comme on le voit, cela ne nous empêche pas d'exécuter la méthode submit() dans notre fonction.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 <script type="text/javascript"> function maFonction(oBouton){ switch(oBouton.id){ case "bouton1" : // traitement ........ if(conditionQuelconque) oBouton.form.submit() ; break ; case "bouton2" : // traitement ........ if(conditionQuelconque) oBouton.form.submit() ; break ; case "bouton3" : // traitement ........ if(conditionQuelconque) oBouton.form.submit() ; break ; } } </script> <form action="pagesuivante.xyz" method="post" onsubmit="return false"> <input type="button" id="bouton1" onclick="maFonction(this)" value="bouton 1"> <input type="button" id="bouton2" onclick="maFonction(this)" value="bouton 2"> <input type="button" id="bouton3" onclick="maFonction(this)" value="bouton 3"> </form>
c'est une bonne idée mais elle me pose un pbm : le traitement PHP du submit est terminé et il réagit en fonction du bouton cliquéJe suggère d'utiliser onsubmit="return false" dans la balise du formulaire, puis d'utiliser des inputs de type button plutôt que de type submit pour la validation avant de poster le formulaire.
sans doute idiot de ma part mais n'ayant jamais regardé ce pbm auparavant je croyais que le $_POST contenait toujours l'identité du SUBMIT cliqué ou celle du 1er SUBMIT en cas de submit par touche ENTREE
il semble que ce ne soit pas toujours le cas, ou que ça varie avec les navigateurs
bref si les boutons ne sont pas de type "submit" je n'aurais pas leur identité dans la variable $_POST, et il reste la question de la touche ENTREE sur un imput text ...
bon je peux passer par un INPUT hiden que j'émarge de l'identité bouton dans la fonction, mais tout ça est bien compliqué et compliquera la modif inéluctable dans x mois par d'autres
je me disais qu'il y avait peut-être une manière "standard" de gérer tout ça ?
en tous cas merci
je ne comprend pas trop le probleme, si tu met des name= a tes submits tu pourras faire un isset sur le $_POST[le name] dans ton php.
Tu peux meme faire un switch.
S'il te faut un bouton submit pour récupérer l'identité de ton formulaire avec PHP, pourquoi ne pas cacher le bouton (avec les styles) en gardant la solution que j'ai proposée ?
Cela dit, j'aimerais comprendre pourquoi il se fait que tu ne peux pas récupérer les valeurs des champs de ton formulaire avec PHP si ce formulaire ne comporte pas "absolument" un bouton submit ou, en substitut, un input de type image. En effet, j'utilise la méthode décrite ci-dessus (onsubmit="return false") systématiquement depuis presque dix ans en CGI, en ASP ou en JSP et je n'ai jamais eu de problèmes avec quelque fureteur que ce soit.
Cela dit, j'aimerais comprendre pourquoi il se fait que tu ne peux pas récupérer les valeurs des champs de ton formulaire avec PHP si ce formulaire ne comporte pas "absolument" un bouton submitje me suis mal expriméje ne comprend pas trop le probleme, si tu met des name= a tes submits tu pourras faire un isset sur le $_POST[le name] dans ton php.
pour mes formulaires j'utilise la même page PHP en affichage initial et au retour d'un submit
je dois donc tester au chargement PHP si ça vient d'un submit ou si c'est un 1er appel
pour ça je colle le même name "postbtn" à tous mes btn submit et des values différentes
au chargement php je me contente donc d'énumerer toutes mes valeurs possibles de $_POST['postbtn']
ce standard me permettait facilement de passer d'un formulaire à l'autre avec un squelette de code facile à modifier et me plaisait bien
mais voila, ça marche bien en cas de click sur mes submit mais pas si l'user submit via la touche ENTREE sur un input txt
dans ce cas il n'y a parfois aucun $_POST[postbtn] (pas toujours, je n'ai pas encore compris comment ça marche, peut-être parce que j'appelle pareil tous mes btn submit)
par ailleurs je me disais que je pourrais faire quelques vérifs adaptées dans le OnSubmit du formulaire en fonction de qui génère le submit
là aussi j'ai beaucoup de mal, avec des btn submit, à détecter d'où vient la soumission (quel btn ou la touche ENTREE)
bref si je n'utilise que des input button il faut
1) récupérer l'identité du bouton cliqué dans un OnClick de chaque btn
2) coller cette identité dans un input hiden
3) au OnSubmit si le hidden est vide lui coller l'identité du btn que je souhaite
je suppose que ça marchera sans pbm aussi bien chez le client que le serveur mais ça fait quand même pas mal de code JS pour pas grand chose, moins facile à transporter d'un formulaire à l'autre, les submit étant tellement plus simples et en plus prémunissant contre les JS désactivés ...
voila en gros pourquoi j'aimerais bien garder mes submit même si j'en fais pas une grosse fixation boudeuse
disons que c'est aussi par curiosité ?
Alors, mets une valeur dans un champ caché qui indique d'où vient le submit...
Tu vérifies la valeur du champ quelBouton au chargement de la page. Si la valeur est vide ou nulle, c'est que le formulaire n'a pas encore été posté.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 <script type="text/javascript"> function maFonction(oBouton){ oBouton.form.quelBouton.value = oBouton.id ; switch(oBouton.id){ case "bouton1" : // traitement ........ if(conditionQuelconque) oBouton.form.submit() ; break ; case "bouton2" : // traitement ........ if(conditionQuelconque) oBouton.form.submit() ; break ; case "bouton3" : // traitement ........ if(conditionQuelconque) oBouton.form.submit() ; break ; } } </script> <form action="pagesuivante.xyz" method="post" onsubmit="return false"> <input type="hidden" id="quelBouton" name="quelBouton" value=""> <input type="button" id="bouton1" onclick="maFonction(this)" value="bouton 1"> <input type="button" id="bouton2" onclick="maFonction(this)" value="bouton 2"> <input type="button" id="bouton3" onclick="maFonction(this)" value="bouton 3"> </form>
.
oui je suis d'accord que c'est une soluce, mais est-ce bien la seule ?Alors, mets une valeur dans un champ caché qui indique d'où vient le submit...
Bah, il y a peut-être les incantations vaudous, mais leur efficacité a sérieusement été mise en doute...![]()
Salut,
Je te propose une autre solution. N'utilise pas de onsubmit mais plutôt le onclick du bouton pour exécuter ta fonction.Ainsi la valeur du bouton sera passée dans la requête POST.
Code : Sélectionner tout - Visualiser dans une fenêtre à part <input type="submit" name="Valider" onclick="if(!VerifFormulaire()){return false;}" value="Valider" ID="Submit2">
Partager