javascript:var我没有定义? (明确规定)

时间:2016-03-21 22:32:02

标签: javascript button click

我想发生什么

所以我想要发生的是函数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)

4 个答案:

答案 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演示

http://jsbin.com/harigewuze/edit?html,js,output

答案 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上