180 votes

Empêcher le défaut sur la soumission du formulaire jQuery

Qu'est-ce qui ne va pas avec ça ?

HTML :

<form action="http://localhost:8888/bevbros/index.php/test" method="post" accept-charset="utf-8" id="cpa-form" class="forms">        
      <input type="text" name="zip" value="Zip code" id="Zip" class="required valid">      
      <input type="submit" name="Next" value="Submit" class="forms" id="1">
  </form>

jQuery :

$("#cpa-form").submit(function(e){
    e.preventDefault();
  });

13 votes

Fonctionne bien ici . Pouvez-vous fournir plus d'informations dans votre question ? Si vous alert() dans le gestionnaire de soumission est-il appelé ? Si ce n'est pas le cas, il se peut qu'il y ait une erreur dans votre script qui empêche le gestionnaire d'événements d'être connecté correctement. Quelque chose dans la console d'erreur ?

3 votes

Ce lien est interne et ne nous est d'aucune utilité.

0 votes

Peut-être qu'une ancienne version a été mise en cache. Il semble que cela fonctionne maintenant.

210voto

Jordan Brown Points 2299

Essayez ça :

$("#cpa-form").submit(function(e){
    return false;
});

16 votes

Cela fonctionne, mais pourquoi la méthode préférée de preventDefault ne fonctionne-t-elle pas ?

26 votes

Voir cette question pour une meilleure explication : stackoverflow.com/questions/1357118/

11 votes

C'est la mauvaise réponse. e.preventDefault() fonctionne bien avec une soumission de formulaire, le problème se situe ailleurs dans le code de l'OP. Utilisation de return false pourrait entraîner des conséquences involontaires.

76voto

scarver2 Points 2605

Utilisez la nouvelle syntaxe d'événement "on".

$(document).ready(function() {
  $('form').on('submit', function(e){
    // validation code here
    if(!valid) {
      e.preventDefault();
    }
  });
});

Citer : https://api.jquery.com/on/

3 votes

Bonjour, cela ne fonctionne pas pour moi. (oui, j'ai mis mon code à l'intérieur $(document).ready() ) Comment faire pour que ça marche ?

1 votes

@GuiImamura Besoin de plus d'informations. Avez-vous défini la variable valide à true ou false ? Pouvez-vous recréer votre code dans jsfiddle.net et envoyer le lien ? Essayez d'ajouter un alert() pour confirmer que la fonction s'exécute. Certaines personnes ont signalé que l'ajout de e.stopPropagation(); après e.preventDefault(); empêche les autres événements enchaînés de se déclencher.

0 votes

Bonjour, j'utilise $('#myFormID').validationEngine('validate') de Moteur de validation jQuery comme variable valid pour vérifier si l'entrée est une adresse électronique valide. Néanmoins, je veux qu'il empêche le comportement par défaut dans les deux cas ; est-ce que la fonction preventDefault doit être à l'intérieur du bloc if, et non avant ?

7voto

$('#cpa-form input[name="Next"]').on('click', function(e){
    e.preventDefault();
});

0 votes

Cela fonctionne parfaitement pour moi sur une page où j'ai un formulaire côté client dans un formulaire côté serveur.

3voto

$(document).ready(function(){
    $("#form_id").submit(function(){
        return condition;
    });
});

3voto

DÉCRYPTÉ - cette partie est périmée, veuillez ne pas l'utiliser.

Vous pouvez également essayer ce code, si vous avez par exemple ajouté ultérieurement des formulaires dynamiques. Par exemple, vous avez chargé une fenêtre async avec ajax et vous voulez soumettre ce formulaire.

$('#cpa-form').live('submit' ,function(e){
    e.preventDefault();      
    // do something
});

UPDATE - vous devez utiliser la méthode jQuery on() et essayer d'écouter le DOM du document si vous voulez gérer du contenu ajouté dynamiquement.

Cas 1, version statique : Si vous n'avez que quelques listeners et que votre formulaire à gérer est codé en dur, alors vous pouvez écouter directement au "niveau du document". Je n'utiliserais pas les listeners au niveau du document, mais j'essaierais d'aller plus loin dans l'arbre de doom, car cela pourrait entraîner des problèmes de performance (cela dépend de la taille de votre site web et de votre contenu).

$('form#formToHandle').on('submit'... 

OU

$('form#formToHandle').submit(function(e) {
    e.preventDefault();      
    // do something
});

Cas 2, version dynamique : Si vous écoutez déjà le document dans votre code, alors cette méthode vous conviendra. Cela fonctionnera également pour le code qui a été ajouté plus tard via DOM ou dynamique avec AJAX.

$(document).on('submit','form#formToHandle',function(){
   // do something like e.preventDefault(); 
});

OU

$(document).ready(function() {
    console.log( "Ready, Document loaded!" );

    // all your other code listening to the document to load 

    $("#formToHandle").on("submit", function(){
        // do something           
    })
});

OU

$(function() { // <- this is shorthand version
   console.log( "Ready, Document loaded!" );

    // all your other code listening to the document to load 

    $("#formToHandle").on("submit", function(){
        // do something           
    })
});

7 votes

.live() est déprécié depuis jQuery 1.7 et supprimé depuis la version 1.9. Utilisez .on() à la place.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X