2017-01-11 9 views
-3

このループに1000msの遅延を追加するにはどうすればよいですか?私はthisの結果をチェックし、彼らは変数に基づいて独自のメソッドを作成したようです。私は、selector()関数の呼び出しの各繰り返しの間に静的な休止時間を追加することを検討しています。

(function doIt(){ 
    $.each(personArray, function(index, person){ 
     $(this).delay(1000 * index)selector(person.RPI) 
}); 
}); 

EDIT:この質問に多くを追加するには、私は、特に私のスクリプトは、配列の項目ごとに一度の関数を呼び出した後に一時停止するための方法を見つけるのに苦労しています。又は:

  • 基準アレイ項目1
  • 呼び出し関数(配列項目1)しばらく
  • 一時
  • リファレンス配列項目2
  • 呼び出し関数(配列項目2)
  • など。

私は、関数全体の反復の間に一時停止に関する答えを得ていますが、私は間にポーズを持つ配列項目ごとに一度実行する方法を探しています。

EDIT:以下に示すようにいくつかのより多くの読書の後、私は自分のコードを再構築しました:

var i= 0; 
var interval = 3000; 
(function iterate() { 
    if (personArray.length > i) { 
     $('#name').html((personArray[i].first)) 
     var x = (personArray[i].RPI); 
     selector(x); 
     i++; 
    } 
    setTimeout(iterate, interval); 
})(); 

を今すぐ...もっと重要な問題は、私は24を言って、間隔での全機能を再起動する方法を、です秒ですか?これを別のsetTimeout関数の中で24000 snd引数で囲むことはできますか?ここではそのためのフィドルです:

function person(first, last, RPI) { 
 
\t this.first = first; 
 
\t this.last = last; 
 
\t this.RPI = RPI; 
 
} 
 
var MW = new person('Mike', 'W', 112792); 
 
var MT = new person('Matt', 'T', 157750); 
 
var DR = new person('Derek', 'R', 165413); 
 
var DD = new person('Darrell', 'D', 112794); 
 
var AG = new person('Andrew', 'G', 137183); 
 
var KR = new person('Kris', 'R', 157751); 
 
var BJ = new person('Bill', 'J', 82517); 
 
var personArray = new Array(); 
 
var personArray = [MW, MT, DR, DD, AG, KR, BJ]; 
 
var i= 0; 
 
var interval = 3000; 
 
(function iterate() { 
 
    if (personArray.length > i) { 
 
\t \t \t \t var x = (personArray[i].RPI); 
 
     $('#name').html((personArray[i].first)); 
 
     selector(x); 
 
     i++; 
 
\t \t \t \t setTimeout(iterate, interval); 
 
    } 
 
})(); 
 
function selector(x){ 
 
\t $('#name2').html("this is x:"+ x); 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script> 
 
<p id="name"></p> 
 
<p id="name2"></p>

+0

$(この):私のスクリプトでは、私は初期化を行うarr.iを使用しています。しかし、おそらくあなたはこの質問のいくつかのソリューションが好きかもしれません:http://stackoverflow.com/questions/24849/is-there-some-way-to-introduce-a-delay-in-javascript –

+0

コードの何が問題なのですか?あなたはそこにいますか?とにかくそれは構文上無効です。 – mpen

+0

セレクター関数によるpersonArrayの各繰り返しの間ではなく、関数の終わりで一時停止します。それが不明な場合は、私は質問を更新することができます。 –

答えて

0

次はスクリプトの簡易版です。それは期待どおりに動作します。

あなたのスクリプトにiが初期化されていないようです。 .delayが動作するはず

var arr=[{RPI:10},{RPI:20},{RPI:30},{RPI:40},{RPI:50}]; 
 
arr.i=0; 
 
$(function(){ 
 
(function iterate() { 
 
    if (arr.length > arr.i) { 
 
    $('#name').html(arr[arr.i++].RPI+'<br>') 
 
    setTimeout(iterate, 1000); 
 
    } 
 
})(); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<h2>the following will change ...</h2> 
 
<div id="name" />

+0

最後の編集でそのブロックをコピー/ペーストしないように無視されました。それを今更新しました。 –

関連する問題