setTimeout 似乎被循环忽略了
setTimeout seems to be ignored by loop
本文关键字:循环 setTimeout 更新时间:2023-09-26
所以基本上我有一组代码可以找到我所有的类别。它将单击它们并获取其下的所有内容。
var Category = [];
var ID1;
var ID2;
var Level2CatsLen
var dispatchMouseEvent = function(target, var_args) {
var e = document.createEvent("MouseEvents");
e.initEvent.apply(e, Array.prototype.slice.call(arguments, 1));
target.dispatchEvent(e);
}
var Level1Cats = document.getElementsByClassName("p-pstctgry-lnk-ctgry "); //GETTING LEVEL 1 CATS
var Level1CatsLen = Level1Cats.length; //GETTING LEVEL 1 CAT LEN
function GoToLevel2(i) { //GO TO NEXT LEVEL!
setTimeout(function() {
dispatchMouseEvent(Level1Cats[i], "mouseover", true, true);
dispatchMouseEvent(Level1Cats[i], "click", true, true);
}, 3000);
}
function GetLevel2() { //GET NEXT LEVEL
setTimeout(function() {
Level2Cats = document.getElementsByClassName("p-pstctgry-lnk-ctgry");
console.log("Level1CatLen: "+Level1CatsLen);
console.log("Level2CatLen: "+Level2CatsLen);
var Level2CatsLen = Level2Cats.length }, 3000);
};
for (i = 0; i <= Level1CatsLen-1; i++) {
console.log(Level1CatsLen);
var ID1 = Level1Cats[i].id;
var temp1 = Level1Cats[i].innerHTML;
temp1.replace(/&/gi, "&").replace(/<[^>]*>/gi, "");
setTimeout(function() {GoToLevel2(i)}, 10000);
setTimeout(function() {GetLevel2()},20000); //RUN IT WITH TIMING
// END OF LEVEL 1
var extracats2 = Level2CatsLen - Level1CatsLen;
if (extracats2 !== 2 || extracats2 !== 0) {
for (ii = 0; ii < extracats2; ii++) { //LEVEL 2
ID2 = Level2Cats[ii+Level1CatsLen].id;
var temp2 = Level2Cats[ii+Level1CatsLen].innerHTML;
temp2.replace(/&/, "&").replace(/<[^>]*>/gi, "");
var Level2Children = [];
for (l = 0; l < level1CatsLen; l++) {
Level2Children.push(Level2Cats[l].id);
}
//DO SOMETHING WITH CATEGORIES - Level 1
Category.push({Name: temp1, ID: ID2, ParentID: 'null', ChildrenIDs: Level2Children});
//FINISH
}}}
我已经分配了两次设置超时只是为了玩东西。但是我遇到的问题是GoToLevel2执行然后获取类别,并试图立即获取它,自然找不到任何东西。尽管设置超时似乎没有效果。它会减慢最初的速度,然后非常快速地向控制台发送垃圾邮件,以获取那里的 Level1Cat 数量。知道为什么吗?
您的变量i
是全局的,并且被覆盖的次数可能比您想象的要多。此外,它稍后被传递给GoToLevel2()
,并且具有与您想象的不同值。我会先改变它,看看问题是否仍然存在。
function GoToLevel2(n) { //GO TO NEXT LEVEL!
setTimeout(function() {
dispatchMouseEvent(Level1Cats[n], "mouseover", true, true);
dispatchMouseEvent(Level1Cats[n], "click", true, true);
}, 3000);
}
// ...
for (var i = 0; i <= Level1CatsLen-1; i++) {
// ...
setTimeout(function() {GoToLevel2(i)}, 10000);
// ...
}
请注意 for
循环中的var
,这会将i
的范围限制为for
-循环。此外,我将其更改为n
in GoToLevel2(n)
以防止读者混淆(对于浏览器来说应该是必需的)。
您在 setTimeout
中使用循环计数器 ('i' var),并且当超时值 i
已经递增后触发代码时。下面是在循环中使用 setTimeout 的示例。
for (var i=0; i < 10; i++)
{
(
function(i)
{
setTimeout(
function()
{
alert(i);
}, 50
);
}
)(i);
}
相关文章:
- JS-我的循环使用setTimeout停止循环
- javascript:在for循环中使用settimeout来定期显示文本
- 如何让 setTimeout 函数运行,然后停止使用循环
- nodejs-settimeout是否在不同的循环中共享变量
- 在for循环中使用setTimeout失败
- 为什么javascript setTimeout()不能在循环中工作
- 如何将setTimeout与“;当“;循环
- 而循环调用setTimeout不起作用
- for循环中嵌套if条件的setTimeout
- Javascript:setTimeout,用于循环和回调函数
- 在循环中调用 setTimeout 未按预期工作
- Jquery 每个循环都无法提取值,除非使用 setTimeout
- 使用 setTimeout() 循环,使矩形变大,直到它到达画布边缘,然后重置
- 我可以在 for 循环中设置多个 window.setTimeout 事件吗?
- Firefox setTimeout + jQuery 淡入淡出循环不一致,提前停止,不会循环
- 为什么我的循环在迭代之间没有等待?setTimeout()
- setTimeout 会创建一个无限循环
- setTimeout 在循环中,它的行为与预期不同
- 循环中 setTimeout 的 Jquery 用法
- 我想循环setTimeout()函数后,每22秒