我想发生什么
所以我想要发生的是函数partA()每2秒点击一次按钮[z]。正在单击的按钮应该更改,因为脚本是循环脚本,例如。第一个循环,它会单击按钮1,然后是按钮2,然后是按钮3,因为 var z = 1 + i ++ 。这可能吗? z应该等于数字1加上循环数。只要变量i小于50,这就应该循环。
发生了什么
如果我测试脚本没有变量z,它可以正常工作,循环播放。但是,如果没有变量z,我必须手动更改等于z的数字,这很费劲,而且很烦人。
var z = 1 + i++
for(i=0;i<50;i++) {
setInterval(partA, 2000);
function partA() {
buttons = document.getElementsByTagName('button');
document.getElementsByTagName('button')[z].click();
}
}
我应该用另一种方式定义i ++吗?我在控制台中运行脚本时遇到的错误是:
未捕获的ReferenceError:我未定义(...)
at:2:13
at Object.InjectedScript._evaluateOn(:878:140)
at Object.InjectedScript._evaluateAndWrap(:811:34)
at Object.InjectedScript.evaluate(:667:21)
答案 0 :(得分:1)
我可以根据您的代码提出一些建议,以便我们尝试单独解决每个问题。
首先在循环之外定义你的函数。如果您想了解其背后的原因,请阅读:Don't make functions within a loop
其次,您应该将i
声明为变量,以设置适用的范围。有关此问题的一些有用信息,请访问:Declaring variables without var keyword
第三,当你运行循环时,你可以在IIFE内运行代码。这样做的原因是当你运行setInterval
时,它运行时i
实际上是3(或循环的最后一个数字)。这是由于setInterval
的异步性质,并且对i
的引用与函数绑定,而不是i
的值。
示例强>
for(var i=0;i<3;i++) {
(function(i) {
setInterval(clickButton(i), 2000);
})(i)
}
function clickButton(idx) {
return function() {
buttons = document.getElementsByTagName('button');
document.getElementsByTagName('button')[idx].click();
}
}
JSBin演示
答案 1 :(得分:0)
为什么要在循环外定义 z ?只需使用我。
for (var i = 0; i < 50; i++) {
...
document.getElementsByTagName('button')[i].click();
}
答案 2 :(得分:0)
没有太多改变你的代码我会像这样写... 你知道它循环50次,你知道我从0增加到49,用i来改变按钮名称,你不需要z ...
for(i = 0; i <50; i ++){
setInterval(partA,2000);
功能部分A(){
buttons = document.getElementsByTagName('button');
document.getElementsByTagName('button')[i + 1] .click();
}
}
答案 3 :(得分:0)
1)这就是您希望代码的样子:
var z;
for(i=0;i<50;i++) {
z=i;
setInterval(partA, 2000);
}
function partA() {
buttons = document.getElementsByTagName('button');
document.getElementsByTagName('button')[z].click();
}
2)不幸的是,在javascript中,由于范围的原因,您对此代码有疑问。我的建议是先阅读此链接javadoc并了解其工作原理。 如果你确实理解了它,那么大拇指......你只是在javascript中提升自己的水平;)
3)如果您仍有问题,请将其发布在JSFiddle上