Empêcher la soumission de formulaires doubles dans jQuery

J’ai un formulaire que les utilisateurs utilisent pour entrer des informations sur une publication. Une fois terminé, ils cliquent sur «Enregistrer» pour mettre à jour. Toutefois, dans de rares cas (10 enregistrements sur 15 000), l’utilisateur a double-cliqué sur le bouton d’enregistrement, ce qui a provoqué la duplication de deux éléments dans l’envoi du formulaire.

J’ai essayé d’utiliser ceci pour l’empêcher:

$('input[type=submit]').click(function(){ $('input[type=submit]').attr('disabled',true); //return true; }); 

Mais le problème avec cela, cela fonctionne parfaitement dans Safari / Firefox, etc., mais ne fonctionne pas dans Internet Explorer 8 (et probablement pas pour 6 & 7)

Lorsque j’appuie sur Enregistrer dans IE8, le bouton est désactivé et c’est tout, aucune soumission de formulaire.

(Je l’ai essayé avec et sans retour vrai;)

Je ne suis pas sûr que ce soit une supposition complète, mais cela dépend peut-être de votre sélecteur. Essayez plutôt:

 $('input:submit').click(function() { $(this).attr('disabled', true); });# 

Vous pouvez également essayer d’intercepter l’ submit event lui-même:

 $('form').bind('submit', function(e) { $(this).find('input:submit').attr('disabled', 'disabled'); }); 

Vous devez gérer l’événement onsubmit du formulaire plutôt que l’événement click du bouton d’envoi.

L’utilisateur peut également appuyer sur Entrée pour soumettre le formulaire. Par conséquent, au lieu de lier l’événement click de bouton, utilisez le formulaire d’envoi. De plus, au lieu de désactiver, masquez le bouton d’envoi en le remplaçant par une image de chargement.

 jQuery("form").submit(function () { jQuery(":submit", this).css("display", "none"); jQuery(":submit", this).after(""); }); 

Chirs, c’est un problème très courant auquel tous les développeurs Web sont confrontés. Et devinez quoi, il a une solution très bien acceptée.

La solution s’appelle PRG (Post -> Redirect -> Get). Plus d’informations à ce sujet sur http://en.wikipedia.org/wiki/Post/Redirect/Get

En gros, vous devez laisser la page en mode HTTP GET afin que, même si l’utilisateur actualise la page, aucune donnée ne soit soumise à nouveau. Donc, vous soumettez le formulaire, redirigez la page vers une URL qui affiche les données récemment soumises en effectuant une demande GET.

EDIT Selon le commentaire ci-dessous, Chris semble déjà suivre le paradigme ci-dessus. Génial. Mais il voit toujours des soumissions en double. Je suggèrerais, lors de la première soumission, de remplacer le bouton par une image de chargement (en premier lieu) afin que l’utilisateur ne voie aucun bouton sur lequel cliquer à nouveau 🙂

 $(document).ready(function() { // function which handles form submission $(#submitButton).replaceWith("