javascript settimeout里面循环和重复

时间:2016-03-10 14:25:02

标签: javascript

我有一个包含一些文字说明的数组。我希望一次显示一个元素,延时(10秒)。显示所有元素后,应该重新开始。

var d = 0;
var dataList = ["a","b","c"];//eg:
function ShowList()
{
    do{
       var descrip = dataList[d];
       document.getElementById('section1').innerHTML = descrip;
       d++;
       setTimeout(ShowList(),10000);

    }while(d < dataList.length);
}
ShowList();

我会尝试上面的代码,但不能正常工作。

4 个答案:

答案 0 :(得分:3)

正如其他答案正确说的那样,你需要将函数本身传递给setTimeout,而不是调用函数。

他们没有说的是使用循环在这里不起作用,因为setTimeout是异步的。只需设置元素内容并调用setTimeout

var d = 0;
var dataList = ["a","b","c"];//eg:
function showList() {
    var descrip = dataList[d];
    document.getElementById('section1').innerHTML = descrip;
    d = (d + 1) % dataList.length;
    setTimeout(showList, 10000);
}
showList();

从头开始,我们使用模数运算符,因此d始终在[0, d.length)范围内。

答案 1 :(得分:3)

您可以改为使用setInterval()

  

setTimeout在超时时执行一次该功能。 setInterval重复执行函数和interval

source

代码示例

var d = 0,
  dataList = ['a', 'b', 'c'];

setInterval(function() {
  var descrip = dataList[d];
  document.getElementById('section1').innerHTML = descrip;
  d++;
  if (d >= dataList.length) {
    d = 0;
  }
}, 10000);

要停止间隔,请使用clearInterval()

答案 2 :(得分:1)

使用setTimeout(ShowList,10000);代替setTimeout(ShowList(),10000);

答案 3 :(得分:0)

在setTimeout中,您必须指定函数的名称,而不是应用程序。当您编写func()时,您正在执行该函数,结果将作为setTimeout的实际参数传递。例如,如果func()返回2,那么当您撰写setTimeout(funct(), 1000)时,就像您正在撰写setTimeout(2, 1000)

因此请写setTimeout(ShowList, 10000);