IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

formulaire : detecter origine du submit dans OnSubmit


Sujet :

JavaScript

  1. #1
    jlf
    jlf est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 140
    Par défaut formulaire : detecter origine du submit dans OnSubmit
    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

  2. #2
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    peut etre en déclarant un variable dans le head :
    et dans tes submits :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick="quelBouton=this.name;" name="moi"

  3. #3
    jlf
    jlf est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 140
    Par défaut
    peut etre en déclarant un variable dans le head :
    et dans tes submits :
    il n'y a vraiment pas d'autre moyen ?

    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)

  4. #4
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    ben tu les as dans le formulaire !!

    ils sont pas encore envoyés ...

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 93
    Par défaut
    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 :
    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>
    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.

  6. #6
    jlf
    jlf est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 140
    Par défaut
    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.
    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é

    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

  7. #7
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    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.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 93
    Par défaut
    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.

  9. #9
    jlf
    jlf est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 140
    Par défaut
    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
    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.
    je me suis mal exprimé

    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é ?

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 93
    Par défaut
    Alors, mets une valeur dans un champ caché qui indique d'où vient le submit...

    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>
    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é.

    .

  11. #11
    jlf
    jlf est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 140
    Par défaut
    Alors, mets une valeur dans un champ caché qui indique d'où vient le submit...
    oui je suis d'accord que c'est une soluce, mais est-ce bien la seule ?

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 93
    Par défaut
    Bah, il y a peut-être les incantations vaudous, mais leur efficacité a sérieusement été mise en doute...

  13. #13
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    Salut,

    Je te propose une autre solution. N'utilise pas de onsubmit mais plutôt le onclick du bouton pour exécuter ta fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="submit" name="Valider" onclick="if(!VerifFormulaire()){return false;}" value="Valider" ID="Submit2">
    Ainsi la valeur du bouton sera passée dans la requête POST.

Discussions similaires

  1. submit dans un formulaire
    Par ecirb dans le forum InfoPath
    Réponses: 6
    Dernier message: 29/03/2007, 09h33
  2. [Formulaire] Mettre deux submit dans un formulaire
    Par sagitarium dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 02/11/2006, 20h24
  3. deux bouton submit dans même formulaire
    Par sansouna24 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 29/05/2006, 11h03
  4. Deux submit dans un même formulaire
    Par hawaks dans le forum Langage
    Réponses: 3
    Dernier message: 21/04/2006, 15h12
  5. deux bouttons submit dans le meme formulaire
    Par nath-0-0 dans le forum Langage
    Réponses: 1
    Dernier message: 25/11/2005, 21h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo