0

関数がJavaScriptまたはjqueryを使用して操作を完了したかどうかを確認する方法はありますか?

setTimeoutを使用して、数値が大きくなるにつれて速度が低下するカウンターを作成しようとしています(必要に応じて出力を減速します)。ご存じのように、数値が大きいほど遅延が長くなります (setTimeout 内)。

私がやろうとしているのは、ボタンをクリックすると、現在のループの繰り返しが画面に表示されることです。このループ数は setTimeout 遅延として使用されるため、数値が小さい間はすぐに通過します。遅延が大きくなると、数値の出力が遅くなります (この数値が遅延であり、遅延が大きいほど遅延が大きいため)。印刷する頻度が少なくなります)。

Here is the logic I'm trying to accomplish
1. Click button
2. Initiate loop
3. trigger function to set timeout
4. set timeout triggers a function to print the loop iteration #
5. Repeat step 3 until the number of set iterations is completed

タイムアウトが設定されていることがわかるように、ループは続行されますが、タイムアウトの遅延が発生します。タイムアウト関数が完了するまで待機し、次の反復に進む一時停止タイプの関数を配置する方法はありますか?

これが私のコードです

<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
</head>

<body>
<form>
<input type="button" value="Display alert box"
onclick="setMessage()" />

<script>

 function setMessage(){
 for(i=0;i<5000;i++){
 var b = i;
 timeMsg();
//some sort of puase here checking until timeMsg & docWrite are completed, then continue to the next iteration
    }
}

function timeMsg(){
var t=setTimeout("docWrite()",b);
}   


function docWrite(){
document.write(i);
}
</script>
</form>
</body>
</html>
4

1 に答える 1

2

for ループでこれを行う代わりに、次のようなことをお勧めします。

function docWrite(i){
    document.write(i);
}

function timeMsg(counter) {
  var t;

  counter++;
  if (counter < 5000) {
    t = setTimeout(function(counter){ 
      docWrite(counter);
      timeMsg(counter);
    }, counter, counter)    
  }
}

timeMsg(0);
于 2012-05-04T19:03:22.960 に答える