Я видел несколько способов сделать это:
- Отключить кнопки при нажатии
- Отключить кнопки при отправке
- Отключить форму при отправке
Но ни один из них не работает должным образом, поэтому я создал свой собственный метод.
Добавьте в форму класс с именем submit-once
и используйте следующий jQuery:
$('form.submit-once').submit(function(e){
if( $(this).hasClass('form-submitted') ){
e.preventDefault();
return;
}
$(this).addClass('form-submitted');
});
Это добавит еще один класс к вашей форме: form-submitted
.Затем, если вы попытаетесь отправить форму еще раз и у нее есть этот класс, jQuery предотвратит отправку формы и выйдет из функции на return;
, и, таким образом, ничего не будет повторно отправлено.
Я выбрал использование$('form.submit-once')
вместо $('form')
, потому что некоторые из моих форм используют Ajax, который должен быть в состоянии отправить несколько раз.
Вы можете проверить это на this jsFiddle .Я добавил target="_blank"
в форму, чтобы вы могли проверить отправку формы несколько раз.
Примечание: вы можете рассмотреть возможность использования не-JS пользователей, также запретив двойную отправку на стороне сервера.Например, имейте переменную сеанса, которая хранит дату / время последней отправки, и игнорируйте любые дальнейшие отправки в течение 3 секунд.