2011-08-14 42 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循環處於每秒執行的函數中。所以整個循環每秒執行一次,並且總是最終看到它插入的最後一個元素。

更改所有代碼上面:

$(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