Int from for 循环在函数中不起作用 - JS
Int from for loop not working in function - JS
我对Javascript很陌生,并且注意到出现了这个奇怪的问题。
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
for (i = 0; i <= Level1CatsLen-1; i++) {
var ID1 = Level1Cats[i].id;
var temp1 = Level1Cats[i].innerHTML;
temp1.replace(/&/gi, "&").replace(/<[^>]*>/gi, "");
function GoToLevel2(callback) { //GO TO NEXT LEVEL!
dispatchMouseEvent(Level1Cats[i], "mouseover", true, true);
dispatchMouseEvent(Level1Cats[i], "click", true, true);
}
function GetLevel2() { //GET NEXT LEVEL
var Level2Cats = document.getElementsByClassName("p-pstctgry-lnk-ctgry");
return Level2Cats.length;
}
setTimeout(function() { //RUN IT WITH TIMING
GoToLevel2();
}, 100);
var Level2CatsLen = GetLevel2();
}
当代码被执行时,它给了我一个错误(无法读取未定义的属性"调度事件")我知道这是因为函数中的 i 似乎不起作用。如果我简单地用 int 值 1 替换它,它将执行并单击 cat 1,按预期单击 cat 1 16 次。
我本来认为这应该有效,有什么想法可以解决吗?
在循环中,创建一个闭包GoToLevel2
,当i
1
时,关闭变量i
。然后循环通过,i
递增到2
,循环终止。
然后,您的setTimeout
在 100 毫秒后触发,并调用您的闭包。它仍然记得曾经有一个变量i
,但现在它包含2
。 Level1Cats[2]
未定义,并且您会收到错误。
标准解决方案是将循环的内容封装到另一个不会在i
关闭的自评估函数中:
for (i = 0; i <= Level1CatsLen-1; i++) {
(function(i) {
// ...
})(i);
}
(另请注意,setTimeout(function() { GoToLevel2(); }, 200)
与 setTimeout(GoToLevel2, 200)
相同,但效率较低。
相关文章:
- Js.erb VS按钮标记-不'不起作用.为什么?
- 为什么indexOf在这个js代码中不起作用
- 淘汰赛.JS'启用'长度绑定条件不起作用
- JS动态添加字段-删除按钮不起作用
- Knockout.JS标签在foreach内部不起作用
- 角度 JS + 重定向不起作用
- JS中的乘法不起作用
- Angular js+ng repeat+字母数字索引不起作用
- 角度Js ng-disabled不起作用
- 路径 lo 加载本地主机子文件夹中的文件不起作用.js仅在基路径中
- Jquery Carousel 不起作用(JS 问题)
- 验证方法在主干网中不起作用.js
- 应用程序.js在骨干中不起作用.js + 要求.js
- 路由在角度下不起作用.js - 没有控制台或语法错误
- Int from for 循环在函数中不起作用 - JS
- 为什么代码不起作用JS
- 为什么这个代码在iPad Pro上不起作用?(JS)
- .将Integer推入数组不起作用JS/JQuery
- 我的下拉列表不起作用-JS有问题
- Bootstrap弹出,粘贴不起作用.JS加载问题