JavaScript 设置超时在循环和重复
javascript settimeout inside loop and repeat
我有一个包含一些文本描述的数组。我想一次显示一个元素,有时间延迟(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();
我将尝试使用上面的代码,但无法正常工作。
你可以
改用setInterval()
。
setTimeout
超时执行一次函数。setInterval
在和间隔上重复执行函数
源
代码示例
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()
正如其他答案正确所说的那样,您需要将函数本身传递给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)
范围内 .
使用 setTimeout(ShowList,10000);
而不是 setTimeout(ShowList(),10000);
在 setTimeout 中,您必须指定函数的名称,而不是应用程序的名称。当你写func()
你正在执行函数,结果将作为setTimeout的实际参数传递。例如,如果func()
返回 2,则当您编写setTimeout(funct(), 1000)
时,就像您在编写 setTimeout(2, 1000)
一样。
因此写setTimeout(ShowList, 10000);
相关文章:
- 而循环只设置php中输入字段中的第一个值
- 错误:Can't在从forEach循环发送标头后设置标头
- 在for循环中使用多维数组设置google.maps.Marker图标
- 在javascript函数的循环中设置全局布尔变量的最佳语法
- 使用val()在jquery循环中设置html字符串的val
- 如何循环设置超时函数
- 创建循环设置超时 jquery 数组
- 使用 jQuery 循环设置事件函数触发器
- 如何在 for 循环中维护迭代变量的原始值,该循环设置事件调用,其中迭代值是函数的一部分
- 为循环设置的限制条件
- 使用jQuery循环设置css属性
- 从PHP foreach循环设置不同的JS变量
- 使用基于Id的循环设置类
- Mootools正在为循环设置事件
- 如何通过for循环设置json数据
- 循环设置内部HTML
- Jquery/ajax循环设置超时
- Jquery /javascript通过循环设置多个超时,一个接一个地独立运行
- 为基于图像数量的JavaScript计时器循环设置计数器
- For循环设置多个onclick侦听器