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 avec 2 boutons submit


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 718
    Par défaut Formulaire avec 2 boutons submit
    Bonjour,

    J'ai un formulaire avec deux boutons submit.
    Je veux bloquer l'envoi seulement sur l'un des boutons ('destroy')
    Voici mon code (extrait):
    Code html : 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    <div class="flex">
    	<form method="post" enctype="multipart/form-data" id="form">
    		<fieldset><legend><?= UPLOAD_FLD1; ?></legend>
    			<input type="hidden" name="max_weight" value="<?= MAX_WEIGHT*1024*1024; ?>" />
    			<p><input name="newFile" type="file" /></p>
    			<p><input type="submit" name="save" value="<?= UPLOAD_BTN_SAVE; ?>" /></p>
    		</fieldset>
    		<fieldset><legend><?= UPLOAD_FLD2; ?></legend>
    			<p><input type="submit" name="destroy" id="destroy" value="<?= UPLOAD_BTN_DEL; ?>" /></p> <!-- onClick="warning()" -->
    		</fieldset>
    	</form>
    </div>
     
    <p class="navH">
    	<a href="displPersFeatures.php?id=<?= $id; ?>"><?= UPLOAD_NAV_BACK; ?></a>
    </p>
     
    <script>
    // Solution 1 qui fonctionne mal avec le onclick actuellement en commentaire
            function warning() {
                    if (!confirm("Etes-vous sûr de vouloir supprimer la photo ?")) {
                            form.addEventListener('submit', function(e) {
                                    e.preventDefault();
                            }, true);
                    }
                    else window.document.getElementById('form').submit();
            }
            
    // Solution 2 qui ne fait pas la distinction entre les deux boutons
    document.getElementById('form').addEventListener('submit', function (e) {
      alert(document.getElementById('destroy').blur());
      exit;
      if (!confirm("Etes-vous sûr de vouloir supprimer la photo ?")) {
        // empêcher l'envoi du formulaire suite à l'annulation
        e.preventDefault();
      }
    });
    </script>
    Avec la solution 1, si je clique une fois sur le bouton 'Annuler' de la fenêtre confirm, le bouton 'save' du formulaire devient inopérant.
    Je précise que le code de traitement du formulaire est dans le même fichier que le formulaire.

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Utilises l'événement onclick sur chacun des boutons pour avoir des actions différentes ce sera plus simple que d'utiliser l'événement onsubmit du formulaire. Et quand il y a plusieurs boutons c'est aussi souvent plus simple d'utiliser des boutons de type "button".

  3. #3
    Membre éprouvé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 718
    Par défaut
    (ou masque-les si tu as besoin de leurs valeurs côté serveur)
    J'en ai effectivement besoin mais qu'entends tu par masquer?
    Et pourquoi ton code ne peut pas marcher avec des vrais boutons submit.

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 202
    Par défaut
    Bonjour,
    il me semble que l'on peut faire de façon plus basique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function warning(e) {
        if (!confirm("Etes-vous sûr de vouloir supprimer la photo ?")) {
            // évite l'envoi du formulaire
            e.preventDefault();
        }
    }
     
    var oBtnDestroy = document.querySelector('#destroy');
    oBtnDestroy.onclick = warning;

    @Watilin : la coloration fonctionne si on utilise <?php en lieu et place de <? déconseillée.
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <p><input type="button" name="destroy" id="destroy" value="<?php= UPLOAD_BTN_DEL; ?>" /></p>
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <p><input type="button" name="destroy" id="destroy" value="<?= UPLOAD_BTN_DEL; ?>" /></p>

  5. #5
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Oui mais déconseillée pour la coloration syntaxique dans ce forum. Autrement je n'ai jamais entendu parler que "<?=" posait problème pour le code lui-même dans un contexte web ? Ou alors j'ai manqué quelque chose mais ça fait des années (php 5.4 si mes souvenirs sont bons) que le l'utilise sans problème.

    @smccbbm Quand on soumet un formulaire en écoutant l'événement onsubmit, on sait juste que le formulaire a été soumis mais pas depuis quel bouton. Pour cette raison il vaut mieux écouter l'événement onclick sur les boutons s'il y a plusieurs boutons pour soumettre le même formulaire si on veut pouvoir les différencier.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 718
    Par défaut
    La solution de NoSmoking fonctionne parfaitement. En plus je ne connaissais pas la fonction querySelector. Par contre, je voudrais savoir à quoi correspond le # devant le nom de la variable.

  7. #7
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Salut !

    Pas facile à première vue de différencier deux boutons submit côté client.
    Je te suggère cette solution : supprime ces boutons submit (ou masque-les si tu as besoin de leurs valeurs côté serveur), et mets à la place des <input type="button">. Avec un gestionnaire d’évènement click sur chacun de ces boutons, tu pourras alors décider dans quelles conditions soumettre le formulaire en appelant .submit() ou pas.

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <p><input type="button" name="save"    id="save"    value=" … " /></p>
    <p><input type="button" name="destroy" id="destroy" value=" … " /></p>

    (Je n’ai pas mis le code PHP car il fait échouer la coloration syntaxique de ce forum.)

    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var $form    = document.getElementById('form');
    var $save    = document.getElementById('save');
    var $destroy = document.getElementById('destroy');
     
    $save.addEventListener('click', function () {
      $form.submit();
    });
     
    $destroy.addEventListener('click', function () {
      if (confirm('Êtes-vous sûr de vouloir supprimer la photo\xA0?')) {
        $form.submit();
      }
    });
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Formulaire avec 2 boutons submit
    Par rhinolophus dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 26/08/2014, 12h37
  2. formulaire avec plusieurs boutons submit dont une image
    Par mounia.n dans le forum Langage
    Réponses: 4
    Dernier message: 04/08/2008, 16h52
  3. Formulaire avec trois boutons submit
    Par ecdxml dans le forum Langage
    Réponses: 11
    Dernier message: 08/06/2008, 21h10
  4. Un formulaire avec plusieurs boutons "submit"
    Par novices dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 11/09/2006, 21h25
  5. Formulaire avec deux boutons submit
    Par Taz_8626 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 30/03/2006, 11h41

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