2011-08-14 18 views
0

私は配列jarrayを持っています。配列の内容を表示し、3番目の要素から6番目の最後の要素まで繰り返して表示したい配列のi番目のセルは1秒ですが、私は次のコードを試してみましたが、配列の最初の要素だけが表示されます、以下の私のコードを参照してください。jQuery settimeout()は配列の繰り返し処理中に動作しません

$(function() { 
    var refreshId = setInterval(function(){ 
    for(var i=3;i<=jarray.length-5;i++){ 
     var r = (-0.5)+(Math.random()*(1000.99)); 
     $("p").text(jarray[i]); 
    } 
    }, 1000); 
}); 

HTML:

<p> Content not loaded yet </p> 
+1

あなたにもjarrayの内容を追加してもらえますか?または[JSFiddle](http://jsfiddle.net)リンクを追加することもできます。長さが短すぎて、3で始まり、5よりも少なくなってしまうのを見ているかもしれません。 –

+0

いいえ配列の長さと内容は問題ではありませんので、心配しないでください。 –

答えて

0

あなたの全体をforループは1秒ごとに実行される関数内にあります。したがって、ループ全体が毎秒実行され、最後に挿入された最後の要素を見ることになります。

変更上記のすべてのコードに:

$(function(){ 
    var i = 3; 
    (function insertArray(){ 
     $("p").text(jarray[i++]); 
     if(i < jarray.length-5) 
      setTimeout(insertArray, 1000); 
    })(); 
}); 
+0

質問を編集しました。今すぐ明確になることを願って、コードを実行して実行してみましょう。 –

+0

@Rahul例:http://jsfiddle.net/zWxX6/ – Paulpro

+0

ありがとう、それは見て良かった!! –

-2

閉鎖して試してみてください...もちろんそのjarrayが適切に事前に定義されていることを確認。

$(function() { 
    var refreshId = setInterval(function(){ 
     for(var i=3;i<=jarray.length-5;i++){ 
     (function() { 
      var r = (-0.5)+(Math.random()*(1000.99)); 
      jarrayi = jarray[i]; 
      $("p").text(jarrayi); 
     }()); 
    } 
    }, 1000); 
}); 
+0

これはクロージャーとは何が関係していますか?どのように役立ちますか? – Mrchief

0

これを試してみてください:

var arrayCount = 0; 
var intervalId = null; 
$(function() { 

    intervalId = setInterval(function(){ 
     if(arrayCount == jarray.length){ 
     clearInterval(intervalId); 
     return; 
     } 
     $("p").text(jarray[arrayCount++]); 

    }, 1000); 
}); 
+0

ありがとう、私のコードで何が間違っていたか教えてください。 –

+0

@Rahul - あなたのコードでは、ロジックは各配列に表示される配列のインデックスを取得するのに全く間違っていました。また、間隔をクリアするコードがないので、決して停止しません。 – ShankarSangoli

関連する問題