以设置的时间增量在对象上循环

时间:2019-11-30 19:34:05

标签: javascript for-loop settimeout

我一直在寻找答案,但是我发现的修复没有帮助,因此我以为我会直截了当地找出问题所在(像往常一样-这里的任何帮助都非常感谢)

所以我有一系列带有评论的对象,我需要它每10秒在网站上发布一个新评论,即更新文本ect:

我认为我会使用:

review = [{
name: 'X',
rating: 'X',
review: 'X'
},

{
name: 'X',
rating: 'X',
review: 'X'
}]

然后使用setTimeout函数和for循环更新网站的h​​tml(显然,这不像我想象的那么容易)-

function init(){

    var name = document.querySelector('.name');

    for(i=0; i<reviews.length; i++){
        setTimeout(function(){
            name.innerHTML = reviews[i].aditional_info_name;
        },10000)
    }

}

这里的任何输入都会有帮助- 我已经看到了有关此主题的其他文章,但是我至今尚未根据我所看到的内容来实现一个固定值。

问题-

我不断得到:

enter image description here

预先感谢, W

2 个答案:

答案 0 :(得分:1)

let reviews = [{
    name: 'X',
    rating: 'X',
    review: 'OX'
  },

  {
    name: 'X',
    rating: 'X',
    review: 'XL'
  },

  {
    name: 'X',
    rating: 'X',
    review: 'XD'
  },

  {
    name: 'X',
    rating: 'X',
    review: 'XJ'
  },

  {
    name: 'X',
    rating: 'X',
    review: 'HX'
  },

  {
    name: 'X',
    rating: 'X',
    review: 'XG'
  }
]


function init() {

  var name = document.querySelector('.name');

  for (var i = 0; i < reviews.length; i++) {
    (function(index) {
      setTimeout(function() {
        name.innerHTML = reviews[index].review;
      }, index * 1000)
    })(i);
  }

}

init();
<div class="name">

</div>

您应该使用letclosure。因为在您设置的超时时间执行完后,剩下的最后一个循环变量还应检查变量名。

function init(){

    var name = document.querySelector('.name');

    for(let i=0; i<reviews.length; i++){
        setTimeout(function(){
            name.innerHTML = reviews[i].aditional_info_name;
        },i*10000)
    }

}

OR

function init(){

        var name = document.querySelector('.name');

        for(var i=0; i<reviews.length; i++){
           (function(index) {
            setTimeout(function(){
                name.innerHTML = reviews[index].aditional_info_name;
            },index*10000)
            })(i);
        }

    }

另请参见this

答案 1 :(得分:0)

尝试将function() {替换为() => {