【问题标题】:jQuery settimeout() not working while iterating over an array迭代数组时jQuery settimeout()不起作用
【发布时间】:2011-08-14 18:26:39
【问题描述】:

我有一个名为 jarray 的数组,我想显示数组的内容,从第 3 个元素顺序迭代到最后一个元素,我想显示数组的第 i 个单元格的时间是 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>

【问题讨论】:

  • 你能把jarray的内容也加进去吗?或者您可以添加JSFiddle 链接。看到您从 3 开始并在 5 结束时,它的长度可能太短了。
  • 不,请不要担心数组长度和内容,这不是问题,谢谢。

标签: jquery arrays settimeout


【解决方案1】:

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

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

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

【讨论】:

  • 编辑了问题,希望现在清楚,让我检查你的代码并运行它,我会告诉你的。
【解决方案2】:

试试这个:

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

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

  }, 1000);
});

【讨论】:

  • 非常感谢,你能告诉我我的代码有什么问题吗。
  • @Rahul - 在您的代码中,让数组的索引在每个间隔中显示的逻辑是完全错误的,而且也没有清除间隔的代码,因此它永远不会停止。
【解决方案3】:

尝试使用闭包...当然要确保之前已正确定义了 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);
});

【讨论】:

  • 这和闭包有什么关系?它有什么帮助?
猜你喜欢
  • 1970-01-01
  • 2019-04-16
  • 1970-01-01
  • 2021-02-24
  • 2022-09-29
  • 2012-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多