【问题标题】:Prevent JS code to run, before function has ended在函数结束之前阻止 JS 代码运行
【发布时间】:2013-04-01 23:45:01
【问题描述】:

我无法理解这个?
为什么是我的:
.each 循环运行是否正确,即使我在每个循环中将事情拖延 1000 毫秒?
问题是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';
  }                    

}

【问题讨论】:

  • setTimeout 不会拖延任何事情。您只需告诉 JavaScript 在将来执行某些操作, 当前脚本执行终止。如果你想在超时后执行一些事情,你必须把它放入/从超时调用。

标签: javascript jquery


【解决方案1】:

Javascript 没有休眠或停止的概念。在setTimeout 调用之后继续执行。这个函数只是安排一个函数在给定的毫秒数之后运行。

为了得到你想要的行为,你需要在setTimeout回调函数中调用下一次迭代。

类似:

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

    // do something

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-30
    • 2020-05-18
    • 1970-01-01
    • 2013-05-05
    • 2021-04-06
    • 1970-01-01
    • 2023-03-13
    • 2021-03-31
    相关资源
    最近更新 更多