在函数结束之前阻止JS代码运行

时间:2013-04-01 23:45:01

标签: javascript jquery

我无法绕过这一个?
为什么是我的:
.each循环直接运行,即使我在每个循环中停留1000ms内的东西?
问题是window.location.href命令在setTimeout 完成之前运行 TO EARLY ?对于stopload()函数也是如此,这也是早期结束的?我已经看到了关于递归setTimeout函数的一些东西,这里需要的是什么以及如何实现它?

function shop(clickedButton)
{
  var buttonvalue = $(clickedButton).val();
  startLoad();
  pdel = 1000;

  $("input:submit[value='buy']").each(function(index)
  {
    if(index != 1)
    {

       $("#backgroundPopup").text(index);
       var submithing = this;  
       setTimeout(function(){ clicksubmitbutton(submithing); },pdel);
       pdel += 1000;
    }                      
  });   

  stopLoad();

  if(buttonvalue == "1")
  {
     window.scrollTo(0,0);
  }
  else
  {
     window.location.href = 'http://my.url';
  }                    

}

1 个答案:

答案 0 :(得分:2)

Javascript没有睡眠或失速的概念。执行会在setTimeout电话后继续执行。此函数只是计划在给定的毫秒数后运行的函数。

为了获得所需的行为,您需要在setTimeout回调函数中调用下一个迭代。

类似的东西:

function submitTheThing(index) {
    if (done) { //some logic
        return;
    }

    // do something

    setTimeout(function() { submitTheThing(index+1); }, 1000);
}