Mise à jour en 2018 : Je viens de recevoir des points pour cette vieille réponse, et je voulais juste ajouter que la meilleur La solution serait de rendre l'opération idempotente afin que les soumissions en double soient inoffensives.
Par exemple, si le formulaire crée une commande, mettez un ID unique dans le formulaire. La première fois que le serveur voit une demande de création de commande avec cet ID, il doit la créer et répondre "succès". Les soumissions ultérieures devraient également répondre "succès" (au cas où le client n'aurait pas reçu la première réponse) mais ne devraient rien changer.
Les doublons doivent être détectés par un contrôle d'unicité dans la base de données pour éviter les situations de concurrence.
Je pense que votre problème est cette ligne :
$('input').attr('disabled','disabled');
Vous désactivez TOUTES les entrées, y compris, je suppose, celles dont les données sont censées être soumises par le formulaire.
Pour désactiver uniquement le(s) bouton(s) d'envoi, il faut pourrait faites-le :
$('button[type=submit], input[type=submit]').prop('disabled',true);
Cependant, je ne pense pas qu'IE soumettra le formulaire si même ces boutons sont désactivés. Je suggère une approche différente.
Un plugin jQuery pour le résoudre
Nous venons de résoudre ce problème avec le code suivant. L'astuce ici est d'utiliser la fonction jQuery data()
pour marquer le formulaire comme déjà soumis ou non. De cette façon, nous n'avons pas à nous occuper des boutons d'envoi, ce qui fait flipper IE.
// jQuery plugin to prevent double submission of forms
jQuery.fn.preventDoubleSubmission = function() {
$(this).on('submit',function(e){
var $form = $(this);
if ($form.data('submitted') === true) {
// Previously submitted - don't submit again
e.preventDefault();
} else {
// Mark it so that the next submit can be ignored
$form.data('submitted', true);
}
});
// Keep chainability
return this;
};
Utilisez-le comme ça :
$('form').preventDoubleSubmission();
S'il y a des formulaires AJAX qui devrait doivent être autorisés à se soumettre plusieurs fois par chargement de page, vous pouvez leur donner une classe l'indiquant, puis les exclure de votre sélecteur comme ceci :
$('form:not(.js-allow-double-submission)').preventDoubleSubmission();
0 votes
Merci à tous pour votre aide !
0 votes
Duplicata possible de Désactiver les liens pour empêcher les doubles-clics dans JQuery