165 votes

Comment faire quelque chose avant de soumettre ?

J'ai un formulaire qui a un bouton qui soumet le formulaire. J'ai besoin de faire quelque chose avant que le formulaire ne soit soumis. J'ai essayé de faire onClick sur ce bouton, mais cela se produit après l'envoi.

Je ne peux pas partager le code mais, en général, que dois-je faire dans jQuery ou JS pour gérer cela ?

11 votes

2 votes

@Brad Christie si seulement je pouvais accepter un commentaire comme réponse. Merci pour votre aide.

5 votes

Je déteste quand stackover ferme une question. Vous pouvez gérer vos actions en utilisant les événements suivants qui se déclenchent juste avant la soumission d'un formulaire : 1- onmouseover 2- onmousemove 3- onmousedown 4- onfocus 5- onmouseup 6- onclick 7- onsubmit

234voto

Dan Breen Points 4381

Si vous disposez d'un formulaire en tant que tel :

<form id="myform">
...
</form>

Vous pouvez utiliser le code jQuery suivant pour effectuer une action avant que le formulaire ne soit soumis :

$('#myform').submit(function() {
    // DO STUFF...
    return true; // return false to cancel form action
});

Mise à jour ; pour les versions plus récentes de JQuery (afin d'éviter les avertissements de dépréciation), essayez :

$('#myform').on('submit', function() {

    // ...

    return true;
});

3 votes

J'ai des difficultés à utiliser cette méthode pour les boucles qui doivent être terminées avant l'envoi. Des suggestions ?

0 votes

Vous avez un code à examiner ? Je ne suis pas sûr de comprendre le problème.

3 votes

Pourquoi cet appel est-il enveloppé dans un appel de fonction vide ? La fonction submit puisse se lier directement à la fonction $('#form') sans la fonction vide qui l'entoure ? EDIT : la documentation suggère que l'appel à la fonction environnante n'est pas nécessaire .

26voto

acme Points 5109

Supposons que vous ayez un formulaire comme celui-ci :

<form id="myForm" action="foo.php" method="post">
   <input type="text" value="" />
   <input type="submit" value="submit form" />

</form>

Vous pouvez joindre un onsubmit -avec jQuery comme ceci :

$('#myForm').submit(function() {
  alert('Handler for .submit() called.');
  return false;
});

Si vous return false le formulaire ne sera pas soumis après la fonction, si vous renvoyez true ou rien, il sera soumis comme d'habitude.

Voir le Documentation jQuery pour plus d'informations.

12voto

James Johnson Points 29414

Vous pouvez utiliser onclick pour exécuter du code JavaScript ou jQuery avant de soumettre le formulaire comme ceci :

<script type="text/javascript">
    beforeSubmit = function(){
        if (1 == 1){
            //your before submit logic
        }        
        $("#formid").submit();            
    }
</script>
<input type="button" value="Click" onclick="beforeSubmit();" />

22 votes

Mais cela ne fonctionne pas lorsque le formulaire contient par exemple un champ de saisie et que l'utilisateur appuie sur la touche retour, ce qui déclenche l'événement submit. Il est généralement préférable de s'attacher directement à l'événement submit afin de s'assurer qu'il est appelé quelle que soit la manière dont l'utilisateur a déclenché la soumission.

2 votes

<input type="submit" value="Click" onmouseover="beforeSubmit() ;" />

4 votes

@Ansyori C'est encore pire !

5voto

rogerlsmith Points 1937

Assurez-vous que le bouton de soumission n'est pas de type "submit", faites-en un bouton. Ensuite, utilisez l'événement onclick pour déclencher du javascript. Vous pouvez alors faire ce que vous voulez avant de poster vos données.

7 votes

Le formulaire peut être soumis de différentes manières, par exemple en appuyant sur la touche "Entrée" dans certains champs. Lier un clic à un bouton qui ne sera peut-être pas cliqué n'est pas une bonne idée. Les autres réponses montrent comment lier onsubmit de la formulaire qui se déclenchera quelle que soit la manière dont le formulaire est soumis.

1 votes

De manière surprenante, ici en 2021, onClick de la type="submit" est déclenché par toute action qui, de toute façon, aboutirait à l'action form.submit(). Fonctionne en appuyant sur la touche Entrée d'un champ de saisie, sur Firefox, Chrome et Brave. Qui sait si c'était le cas il y a dix ans.

3voto

Stefanyuk Yuriy Points 21

Forme :

<form id="formId" action="/" method="POST" onsubmit="prepareForm()">
   <input type="text" value="" />
   <input type="submit" value="Submit" />
</form>

Fichier Javascript :

function prepareForm(event) {
  event.preventDefault();
  // Do something you need
  document.getElementById("formId").requestSubmit();
}

Note : Si vous soutenez Safari (ce qui est sans doute le cas), vous devrez faire appel à un polyfill para requestSubmit()

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