Оновлення в 2018 році : я щойно отримав кілька балів за цю стару відповідь, і просто хотів додати, що найкращим рішенням було б зробити операцію ідентичною, щоб дублікати подань були нешкідливими.
Наприклад, якщо форма створює замовлення, введіть у форму унікальний ідентифікатор. Перший раз, коли сервер бачить запит на створення замовлення з цим ідентифікатором, він повинен створити його та відповісти на "успіх". Подальші подання також повинні відповідати "успіхом" (у випадку, якщо клієнт не отримав першої відповіді), але не повинні нічого змінювати.
Дублікати повинні бути виявлені за допомогою перевірки унікальності в базі даних, щоб запобігти умовам перегонів.
Я думаю, що ваша проблема полягає в цій лінії:
$('input').attr('disabled','disabled');
Ви вимикаєте ВСІ вхідні дані, включаючи, напевно, ті, дані яких форма повинна надати.
Щоб вимкнути лише кнопки надсилання, ви можете зробити це:
$('button[type=submit], input[type=submit]').prop('disabled',true);
Однак я не думаю, що IE подасть форму, якщо навіть ці кнопки відключені. Я б запропонував інший підхід.
Плагін jQuery для його вирішення
Ми просто вирішили цю проблему за допомогою наступного коду. Трюк тут полягає у використанні jQuery's data()
для позначення форми як поданої чи ні. Таким чином, нам не доведеться возитися з кнопками подання, що вироджує 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;
};
Використовуйте його так:
$('form').preventDoubleSubmission();
Якщо є форми AJAX, яким слід дозволити надсилати кілька разів на завантаження сторінки, ви можете дати їм клас із зазначенням цього, а потім виключити їх із селектора так:
$('form:not(.js-allow-double-submission)').preventDoubleSubmission();