如何使用jQuery延迟事件传播

时间:2014-11-05 12:28:04

标签: javascript jquery delay event-propagation

我想在用户提交表单之后但在他离开页面之前显示一个注释。

目前我正在使用此(缩减示例代码):

$('form').submit(function(event) {
    $('.note').show();

    setTimeout(function() {                 
        $('form').unbind().submit();
    }, 2000);

    return false;
});

这有效,但似乎不太好。还有其他方法,比如函数$.delayPropagation(2000);吗?

PS:该笔记涵盖整个屏幕,因此在此期间用户将无法再次提交。

1 个答案:

答案 0 :(得分:4)

这是延迟操作的适当方法。

您可能实际上想要首先取消绑定事件以停止多个呼叫(您当前有一个2秒钟的窗口,他们可以再次提交)。

作为标准做法,您应该只运行一次jQuery选择器(使用temp var来保存结果)。 $前缀也是命名jQuery变量的另一个标准。现在这意味着下面的代码将分别支持页面上的多个表单。

$('form').submit(function(event) {
    var $form = $(this);
    $('.note').show();
    $form.unbind()
    setTimeout(function() {                 
        $form.submit();
    }, 2000);

    return false;
});

您必须立即return false以避免阻止浏览器。

注意:

  • 另一种方法是使用Ajax作为表单帖子,然后有延迟,然后转到新页面
  • setTimeout是推迟执行代码的最ubiquitous方法。

注意:我只想在帖子中使用术语ubiquitous:)