setTimeout仅在1000ms下工作

时间:2013-03-29 09:40:32

标签: javascript jquery settimeout

我希望有一个超时功能,所以当提交表单时,提交后两秒会显示警报。我使用的代码不起作用:

$(document).ready(function() {
  $("#newsletter").submit(function() {
     setTimeout(function() {
      alert("submitted");             
    }, 2000);
   });
});

但是当我将2000ms更改为900时似乎工作正常:

$(document).ready(function() {
  $("#newsletter").submit(function() {
    setTimeout(function() {
     alert("submitted");              
   }, 900);
  });
});

如何让2000毫秒工作?

3 个答案:

答案 0 :(得分:5)

唯一可能的原因是您的form已提交,用户将在2秒之前转到新页面(表单的action)。

正如Thilo的评论中所建议的,如果显示警报是不可避免的,请通过AJAX提交,以便当前页面(包含警报代码)保持不变并因此执行。

答案 1 :(得分:0)

您可以将代码更改为:

$(document).ready(function() {
  $("#newsletter").submit(function(event) {
     var element = this;
     event.preventDefault();
     setTimeout(function() {
      alert("submitted");

      //rest of the code

      element.submit();
    }, 2000);
   });
});

<强> JSFIDDLE

答案 2 :(得分:0)

你可以这样使用。原始代码的问题在于,它是在分配时间之前提交的。

$(document).ready(function() {
    $("#newsletter").submit(function(e) {
        e.preventDefault();
        setTimeout(function() {
            alert("submitted");
        }, 2000);
    });
});