Как отложить распространение событий с помощью 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 в посте:)

Другие вопросы по тегам