我从这里获得以下代码: How do I add a delay in a JavaScript loop? 我在IE的控制台中使用它,在此代码之后,我在控制台中使用myFunction()调用该函数以运行它;第一个代码运行良好,它单击第二个标记为“ something”的元素10次,两次单击之间的延迟为3000毫秒。
function myFunction() {
(function myLoop (i) {
setTimeout(function () {
document.getElementsByTagName("something")[1].click();
if (--i) myLoop(i); // decrement i and call myLoop again if i > 0
}, 3000)
})(10);
}
我想通过foor循环更改此代码中的数字“ 1”,因此我想创建一个代码,该代码单击名为“ something”的元素。 我创建了以下代码,但无法正常工作:
for (x=1;x<10;x++){
function myFunction() {
(function myLoop (i) {
setTimeout(function () {
document.getElementsByTagName("something")[1].click();
if (--i) myLoop(i); // decrement i and call myLoop again if i > 0
}, 3000)
})(10);
}
}
答案 0 :(得分:0)
如果要间隔打印每个元素,则需要将计时值乘以整数,否则所有这些元素将一次记录。
此外,您可能无需在循环内创建myFunction
for (var x = 1; x < 5; x++) {
(function(i) {
setTimeout(function() {
console.log(i);
}, i * 1000)
}(x))
}
答案 1 :(得分:0)
通常更容易使用setInterval
,而不是setTimeout
的循环。一切都变得更加简单:
var count = 10
var intv = setInterval(function(){
if (count === 0 ) {
clearInterval(intv)
console.log("done")
return
}
// do something
console.log(count--)
}, 1000)
但是您可以递归调用setTimeout
:
(function myLoop (i) {
setTimeout(function () {
console.log("loop: ", i)
if (--i) myLoop(i);
}, 1000)
})(10);
将整个内容放入for循环并递归调用是很奇怪的,因为循环将运行并产生一堆独立运行的超时,我认为这不是您想要的。
答案 2 :(得分:-1)
function myFunction() {
(function myLoop (i) {
setTimeout(function () {
document.getElementsByTagName("div")[1].click();
if (--i) myLoop(i); // decrement i and call myLoop again if i > 0
}, 3000)
})(10);
}
for (x=1;x<10;x++){
myFunction();
}
<div>1</div>
尝试这样。我用div
代替了something