在两个提交之间强制等待

时间:2011-08-31 13:50:58

标签: javascript jquery

我有一个表单在提交时执行AJAX操作。在用户提交表单后,我想将最短的等待时间设为5秒,再次发布。

有什么更好的方法?我制作了这个剧本(不起作用,但我想这里有想法):

$("form#submit_under_wall"+array[1]).submit(function() {

    var submit_timestamp=0;
    var c = new Date();
    var now = ISODateString(c); 

    if(now-submit_timestamp>5){

         var d = new Date();
         var timestamp_message = ISODateString(d); 
         submit_timestamp = timestamp_message ;

          //AJAX ACTION             

    }else{ alert("Wait 5sec between each post."); }


return false;   
});

3 个答案:

答案 0 :(得分:2)

这不起作用,因为每次提交时都会重置时间戳,您需要在函数外部移动submit_timestamp。此外,5应该是5 * 1000

这样的事情(未经测试):

var submitTime = (new Date()).getTime() - 5000; //let user submit if he clicks within 5s of page load
$("form#submit_under_wall"+array[1]).submit(function(e) {
    var now = (new Date()).getTime();
    if(now-submitTime > 5000){
         submitTime = (new Date()).getTime();
         //AJAX ACTION             
    } else {
        alert("Wait 5sec between each post.");
    }
    e.preventDefault(); 
});

答案 1 :(得分:0)

最简单,最标准的方法是使用Javascript原生setTimeout方法。

var last_action;

function ajax_action() {
  last_action = Date.getTime();
  // AJAX STUFF
}

$("form#submit_under_wall"+array[1]).submit(function(e) {
  e.preventDefault(); // Sexier than 'return false'
  if(last_action != undefined) {
    setTimeout(ajax_action, Date.getTime()-last_action); // Wait for 5s before doing the action 
  } else {
    ajax_action();
  }
});

答案 2 :(得分:0)

使用window.setTimeout()

  1. 在函数中包含您想要执行的操作(例如function foo (){ alert('test'); }

  2. 请拨打5秒延迟setTimeout(foo,5000)