2012-05-04 34 views
0

関数がjavascriptまたはjqueryを使用して操作を完了したかどうかを確認する方法はありますか?イベント/関数がjqueryまたはjavascriptで完了するまで一時停止

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> 

答えて

2

代わりのループのためにこれをやっている、私は次のような何かを行うことをお勧めします:

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); 
+0

私はそのことについて考えたが、私は使用する理由forループがあるので、私は一時停止して、他の関数を印刷してから続行することができます。 if文でそれをやってもいいですか? – user1104854

+0

印刷が同期的に行われるため、印刷を待つ必要はありません。スクリプトの次の行が実行される前に完了します。 setTimeoutコールバック関数は非同期的に発生するため、完了後に実行する必要のあるコードはsetTimeoutsコールバックに格納する必要があります。 – Jack

+0

ありがとう、それを認識していない。上記のコードにどのように実装するのですか?コピー/ペーストしようとしましたが動作しませんでした。これはタイマーが初期設定されていないためですか?たぶん私は持ってはいけないものを削除したかもしれない。 – user1104854

関連する問題