Utilisation de JQuery - empêcher l'envoi du formulaire


178

Comment empêcher l'envoi d'un formulaire à l'aide de jquery?

J'ai tout essayé - voir 3 options différentes que j'ai essayées ci-dessous, mais tout ne fonctionnera pas:

    $(document).ready(function() { 

            //option A
            $("#form").submit(function(e){
                e.preventDefault();
            });

            //option B
            $("#form").submit(function(e){
                stopEvent(e);
            });

            //option C
            $("#form").submit(function(){
                return false;
            });
    });

Qu'est-ce qui ne va pas?

Mise à jour - voici mon html:

    <form id="form" class="form" action="page2.php" method="post"> 
       <!-- tags in the form -->
       <p class="class2">
           <input type="submit" value="Okay!" /> 
       </p>
    </form>

Y a-t-il quelque chose qui ne va pas ici?


Montrez votre HTML car il n'y a rien de mal avec preventDefault ou retournez false lorsque vous l'avez posté, à part que votre sélecteur est totalement faux.
Sparky

1
return false;après le .submit()travaillé pour moi! J'avais le même problème
d -_- b

Si une erreur JavaScript se produit dans le gestionnaire, le e.preventDefault();code n'est pas atteint / exécuté.
Tom

Réponses:


264

Deux choses ressortent:

  • Il est possible que votre nom de formulaire ne le soit pas form. Faites plutôt référence à la balise en supprimant le #.
  • La e.preventDefaultsyntaxe JQuery est également correcte, par exemple

        //option A
        $("form").submit(function(e){
            e.preventDefault();
        });

L'option C devrait également fonctionner. Je ne connais pas l'option B

Un exemple complet:

<html>
    <head>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

        <script type='text/javascript'>
         $(document).ready(function() {
            //option A
            $("form").submit(function(e){
                alert('submit intercepted');
                e.preventDefault(e);
            });
        });
        </script>
    </head>

    <body>
        <form action="http://google.com" method="GET">
          Search <input type='text' name='q' />
          <input type='submit'/>
        </form>
    </body>
</html>

2
Quelque chose ne va pas. J'utilise cette technique au quotidien. La meilleure estimation serait qu'il y ait des erreurs JavaScript sur la page, peut-être la vérifier avec FireBug?
Philip Fourie

@LucyWeatherford, j'ai mis à jour ma réponse avec un exemple qui fonctionne. Peut-être que vous apercevez quelque chose.
Philip Fourie

Dans votre mise à jour html, j'ai remarqué que vous avez un attribut de classe pour votre formulaire. Modifiez votre sélecteur JQuery de $('#form')à $('.form')pour les attributs de classe.
Philip Fourie

1
Merci! J'ai fini par utiliser votre code sur la même page, et cela a fonctionné, je ne sais toujours pas ce qui n'allait pas, mais tout va bien maintenant. Merci!
Lucy Weatherford

1
@ ÂngeloRigo e est simplement le nom que vous donnez au paramètre, dans ce cas, c'est l'événement de soumission.
squall3d

34

Vous avez probablement peu de formulaires sur la page et l'utilisation de $ ('form'). Submit () ajoute cet événement à la première occurrence du formulaire sur votre page. Utilisez plutôt le sélecteur de classe ou essayez ceci:

$('form').each(function(){
    $(this).submit(function(e){
        e.preventDefault();
        alert('it is working!');
        return  false;
    })
}) 

ou une meilleure version de celui-ci:

$(document).on("submit", "form", function(e){
    e.preventDefault();
    alert('it works!');
    return  false;
});

1
Dans mon cas, renvoyer false était une clé.
elquimista

19

Pour empêcher l'utilisation par défaut / empêcher la soumission de formulaire

e.preventDefault();

Pour arrêter le bouillonnement d'événements, utilisez

e.stopPropagation();

Pour éviter la soumission du formulaire, «return false» devrait également fonctionner.


Consultez cette réponse car jQuery les gère différemment. stackoverflow.com/questions/1357118/…
Sparky

1
Vérifiez ceci pour comprendre l'événement bubling quirksmode.org/js/events_order.html
The Alpha

2
Le jQuery sur l' API déclare: "Renvoyer false à partir d'un gestionnaire d'événements appellera automatiquement event.stopPropagation()et event.preventDefault(). Une falsevaleur peut également être passée pour le gestionnaire comme raccourci pour function(){ return false; }."
Paul

7

J'ai aussi eu le même problème. J'avais aussi essayé ce que vous aviez essayé. Ensuite, je change ma méthode pour ne pas utiliser jquery mais en utilisant l'attribut "onsubmit" dans la balise form.

<form onsubmit="thefunction(); return false;"> 

Ça marche.

Mais, lorsque j'ai essayé de mettre la valeur de retour faux uniquement dans "thefunction ()", cela n'empêche pas le processus de soumission, donc je dois mettre "return false;" dans l'attribut onsubmit. Donc, je conclus que mon application de formulaire ne peut pas obtenir la valeur de retour de la fonction Javascript. Je n'en ai aucune idée.


1
C'est la différence entre false;et return false;. Vous auriez besoin d'avoironsubmit="return thefunction();"
xr280xr

4

J'ai eu le même problème et je l'ai résolu de cette façon (pas élégant mais ça marche):

$('#form').attr('onsubmit','return false;');

Et cela a l'avantage, à mon avis, que vous pouvez inverser la situation à tout moment:

$('#form').attr('onsubmit','return true;');

Il serait peut-être un peu plus confortable de simplement supprimer l'attribut lors du retour de la prévention de soumission de formulaire$('#form').removeAttr('onsubmit');
barbieswimcrew

4

Attachez l'événement à l'élément de soumission et non à l'élément de formulaire. Par exemple, dans votre html, faites comme ceci

$('input[type=submit]').on('click', function(e) {
    e.preventDefault();
});

2

Vous pouvez simplement vérifier si le formulaire est valide si oui, exécuter la logique de soumission sinon afficher une erreur.

HTML

<form id="form" class="form" action="page2.php" method="post">
    <input type="text" class="check-validity" value="" />
    <input type="text" class="check-validity" value="" />
    <input type="text" class="check-validity" value="" />
    <input type="text" class="check-validity" value="" />
    <input type="text" class="check-validity" value="" />
    <input type="text" class="check-validity" value="" />
    <input type="text" class="check-validity" value="" />

    <input type="submit" value="Okay!" />
</form>

Javascript

    $(document).ready(function () {
        var isFormValid = true;

        function checkFormValidity(form){
            isFormValid = true;
            $(form).find(".check-validity").each(function(){
                var fieldVal = $.trim($(this).val());
                if(!fieldVal){
                    isFormValid = false;
                }
            });
        }


        //option A
        $("#form").submit(function (e) {
            checkFormValidity("#form");
            if(isFormValid){
                alert("Submit Form Submitted!!! :D");
            }else{
                alert("Form is not valid :(");
            }
            e.preventDefault();
        });
    });

1

Lorsque j'utilise une <form>balise sans attribut id="form"et que je l'appelle directement par son nom de balise dans jquery, cela fonctionne avec moi.
votre code dans un fichier html:

<form action="page2.php" method="post">

et en script Jquery:

$(document).ready(function() {
      $('form').submit(function(evt){
          evt.preventDefault();// to stop form submitting
      });
 });

1

$('#form')recherche un élément avec id="form".

$('form') recherche l'élément de formulaire


0

Vous oubliez l'identifiant du formulaire et cela fonctionne

$('form#form').submit(function(e){
   e.preventDefault();
   alert('prevent submit');             
});


0

Cela semble également fonctionner et peut être légèrement plus simple:

$('#Form').on('submit',function(){
    return false;
})

0

En utilisant jQuery, vous pouvez effectuer les opérations suivantes:

1- Utilisez l'événement de soumission de formulaire natif avec un bouton Soumettre, tout en empêchant le déclenchement de l'événement, puis

2- Vérifiez le formulaire Propriété valide Cela peut être implémenté comme suit:

1- HTML:

 <form id="yourForm">
    <input id="submit" type="submit" value="Save"/>
</form>

2- Javascript

 $("form").on("submit", function (e) {
        e.preventDefault();
        if ($(this).valid()) {  
           alert('Success!');
        }
    });
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.