2014-11-05 56 views
3

我想在用户提交表单之后但在离开页面之前显示注释。如何使用jQuery来延迟事件传播

目前我使用这个(减少示例代码):

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

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

    return false; 
}); 

这工作,但似乎并没有对我好。有没有其他方式,如功能$.delayPropagation(2000);

PS:注意事项覆盖了整个屏幕,因此在此期间用户将无法再次提交。

+1

“'似乎没有被nice'”是没有问题的一个很好的技术说明。再试一次? :) – 2014-11-05 12:30:49

+0

@TrueBlueAussie没错。它有效,但我这样做似乎是错误的。它看起来像某种“解决问题”和肮脏的解决方案。 – lampshade 2014-11-05 12:32:17

+0

没关系。无论如何,你将不得不使用setTimeout。 – dfsq 2014-11-05 12:32:59

回答

3

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

您可能实际上首先要解除事件以停止多个呼叫(您目前有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在后:)

+0

+1感谢您的努力。我现在根据你的建议直接取消绑定。 – lampshade 2014-11-05 12:41:20

+1

我总是在变量中存储选择器 - 我只是想让示例代码尽可能容易阅读。 :) – lampshade 2014-11-05 12:43:00