我一直在寻找答案,但是我发现的修复没有帮助,因此我以为我会直截了当地找出问题所在(像往常一样-这里的任何帮助都非常感谢)
所以我有一系列带有评论的对象,我需要它每10秒在网站上发布一个新评论,即更新文本ect:
我认为我会使用:
review = [{
name: 'X',
rating: 'X',
review: 'X'
},
{
name: 'X',
rating: 'X',
review: 'X'
}]
然后使用setTimeout函数和for循环更新网站的html(显然,这不像我想象的那么容易)-
function init(){
var name = document.querySelector('.name');
for(i=0; i<reviews.length; i++){
setTimeout(function(){
name.innerHTML = reviews[i].aditional_info_name;
},10000)
}
}
这里的任何输入都会有帮助- 我已经看到了有关此主题的其他文章,但是我至今尚未根据我所看到的内容来实现一个固定值。
问题-
我不断得到:
预先感谢, W
答案 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>
您应该使用let
或closure
。因为在您设置的超时时间执行完后,剩下的最后一个循环变量还应检查变量名。
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() {
替换为() => {
。