125 votes

jQuery - empêcher le défaut, puis continuer le défaut

J'ai un formulaire qui, lorsqu'il est soumis, doit faire l'objet d'un traitement supplémentaire avant que le formulaire ne soit soumis. Je peux empêcher le comportement de soumission du formulaire par défaut, puis effectuer mon traitement supplémentaire (il s'agit essentiellement d'appeler l'API Google Maps et d'ajouter quelques champs cachés au formulaire) - et j'ai ensuite besoin que le formulaire soit soumis.

Existe-t-il un moyen d'"empêcher le défaut", puis un peu plus tard de "poursuivre le défaut" ?

70voto

lighta Points 1286

Utilisez jQuery.one()

Attachez un gestionnaire à un événement pour les éléments. Le gestionnaire est exécuté au maximum une fois par élément et par type d'événement.

$('form').one('submit', function(e) {
    e.preventDefault();
    // do your things ...

    // and when you done:
    $(this).submit();
});

L'utilisation de one empêcher aussi la boucle infinie parce que cette submit est détaché après le premier envoi.

55voto

Bondye Points 4513

Lorsque vous liez le .submit() au formulaire, et vous faites les choses que vous voulez faire avant de retourner (true), ces choses se produisent avant la soumission réelle.

Par exemple :

$('form').submit(function(){
    alert('I do something before the actual submission');
    return true;
});

Un exemple simple

Un autre exemple sur jquery.com : http://api.jquery.com/submit/#entry-examples

32voto

bipen Points 21912

Je ferais juste ça :

 $('#submiteButtonID').click(function(e){
     e.preventDefault();
     //do your stuff.
     $('#formId').submit();
 });

Appelez preventDefault au début et utiliser submit() plus tard, si vous avez juste besoin de soumettre le formulaire

19voto

Joepreludian Points 570

En utilisant cette méthode, vous ferez une boucle sans fin sur votre JS. Pour une meilleure méthode, vous pouvez utiliser ce qui suit

var on_submit_function = function(evt){
    evt.preventDefault(); //The form wouln't be submitted Yet.
    (...yourcode...)

    $(this).off('submit', on_submit_function); //It will remove this handle and will submit the form again if it's all ok.
    $(this).submit();
}

$('form').on('submit', on_submit_function); //Registering on submit.

J'espère que cela vous aidera ! Merci !

15voto

      $('#myform').on('submit',function(event){
        // block form submit event
        event.preventDefault();

        // Do some stuff here
        ...

        // Continue the form submit
        event.currentTarget.submit();
  });

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