0

私はこれについて頭を包むことができませんか?
それが私の理由:
ループごとに 1000 ミリ秒ずつ内部で処理を停止しているにもかかわらず、.each ループが正常に実行されるのはなぜですか?
問題は、setTimeoutが終了する前にwindow.location.href コマンドが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';
  }                    

}

4

1 に答える 1

2

Javascript には、スリープやストールの概念がありません。実行は、呼び出しの直後に続行されsetTimeoutます。この関数は、指定されたミリ秒数の後に関数が実行されるようにスケジュールするだけです。

目的の動作を得るには、setTimeoutコールバック関数で次の反復を呼び出す必要があります。

何かのようなもの:

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

    // do something

    setTimeout(function() { submitTheThing(index+1); }, 1000);
}
于 2013-04-01T23:53:22.210 に答える