У меня есть форма ввода с кнопкой отправки. Я не хочу, чтобы пользователь мог дважды щелкнуть кнопку отправки и дважды отправить форму...
Итак, я добавил следующий jQuery в мою форму:
var prevSubmitTime = new Date('2000-01-01');
function preventFromBeingDoubleSubmitted() {
$('form').each(function () {
$(this).submit(function (e) {
if ($("form").valid()) {
var curSubmitTime = new Date($.now());
// prevent the second submit if it is within 2 seconds of the first submit
if (curSubmitTime - prevSubmitTime < 2000) {
e.preventDefault();
}
prevSubmitTime = new Date($.now());
}
});
});
}
$(document).ready(function () {
preventFromBeingDoubleSubmitted();
});
Приведенный выше код хранит время отправки и предотвращает повторную отправку, если это слишком рано (менее 2 секунд), я не хочу постоянно отключать кнопку отправки, если возникает ошибка на стороне сервера...
Этот код делает то, что я хочу, но при отладке кода я никогда не могу достичь точки e.preventDefault();
... даже если я дважды нажму кнопку отправки.
Похоже, что второе событие отправки ожидает завершения первого события отправки перед запуском.
Но если я preventFromBeingDoubleSubmitted()
функцию preventFromBeingDoubleSubmitted()
, то я смогу дважды отправить форму, дважды щелкнув кнопку отправки.
Может кто-нибудь объяснить, почему иногда события отправки запускаются сразу одно за другим... а иногда это не так? Влияет ли размещение обработчика событий внутри .each()
на их поведение при выполнении?