Как отложить распространение событий с помощью jQuery
Я хочу отобразить заметку после того, как пользователь отправит форму, но до того, как он покинет страницу.
В настоящее время я использую это (уменьшенный пример кода):
$('form').submit(function(event) {
$('.note').show();
setTimeout(function() {
$('form').unbind().submit();
}, 2000);
return false;
});
Это работает, но не кажется хорошим. Есть ли другой способ, как функция $.delayPropagation(2000);
?
PS: заметка покрывает весь экран, поэтому пользователь не сможет отправить заявку снова в течение этого времени.
1 ответ
Это подходящий способ отложить операцию.
Возможно, вы захотите сначала отменить привязку события, чтобы прекратить несколько вызовов (в настоящее время у вас есть 2-секундное окно, в котором они могут отправить снова).
Как стандартная практика, вы должны запускать селекторы jQuery только один раз (используйте временную переменную, чтобы сохранить результат). $
Префиксы также являются еще одним стандартом для именования переменных jQuery. Теперь это означает, что код ниже будет поддерживать несколько форм на странице отдельно.
$('form').submit(function(event) {
var $form = $(this);
$('.note').show();
$form.unbind()
setTimeout(function() {
$form.submit();
}, 2000);
return false;
});
Вы должны return false
немедленно, чтобы избежать блокировки браузера.
Заметки:
- Альтернативой было бы использовать
Ajax
для формы сообщения, затем задержка, затем перейдите на новую страницу setTimeout
это самый распространенный способ задержать выполнение кода.
Примечание: я просто хотел использовать термин ubiquitous
в посте:)