迭代数组时jQuery settimeout()无法正常工作

时间:2011-08-14 18:26:39

标签: jquery arrays settimeout

我有一个名为jarray的数组,我想显示数组的内容,顺序迭代从第3个元素到第6个最后一个元素,我想要显示数组的第一个单元格的时间是1秒,我试过了下面的代码,但只显示数组的第一个元素,请参阅下面的代码:

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

3 个答案:

答案 0 :(得分:0)

你的整个for循环都在每秒执行的函数中。所以整个循环每秒执行一次,你总是看到它插入的最后一个元素。

将上面的所有代码更改为:

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

答案 1 :(得分:0)

试试这个:

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

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

  }, 1000);
});

答案 2 :(得分:-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);
});