-1

我试图在 javascript 中开发一个简单的 Greasemonkey 脚本。如何在每次点击之间自动模拟特定按钮的点击?

这是我的代码:

var Next=document.getElementsByClassName("SubmitButton");

for (var i=0, c = Next.length; i<c; i++)
{
    Next[i].click();
    setTimeout('Next[i].click()',3000);
}

问题是代码只点击 的第一个值Next。为什么?

4

2 回答 2

1

问题是您将所有操作的超时设置为同一时间,因此它们将同时运行。

此外,您i在代码中使用了变量,它将在循环完成后运行,因此它将指向数组中最后一项之后的索引。

使用闭包为每个项目创建一个单独的变量,并使用匿名函数而不是字符串让代码在超时时执行:

var Next = document.getElementsByClassName("SubmitButton");

for (var i = 0, c = Next.length; i < c; i++) {

//Next[i].click();

  (function(element, time){

    setTimeout(function(){ element.click(); }, time);

  })(Next[i], 3000 * i);

}
于 2012-08-13T08:29:17.953 回答
1

问题是:

  1. 自动评估字符串在 Greasemonkey 中不能正常工作(无论如何都应该避免使用)。所以传递一个函数给setTimeout(). 这将起作用;注意参数是如何处理的

    var Next = document.getElementsByClassName ("SubmitButton");
    
    for (var i=0, c = Next.length; i<c; i++) {
        Next[i].click();
        setTimeout (function (J) {Next[J].click(); }, 3000, i);
    }
    
  2. 你似乎想要一个间隔,并且已经用setinterval两次标记了这个问题。但是代码使用setTimeout,它只触发一次,而不是每 3 秒触发一次。也许你想用setinterval

        setinterval (function (J) {Next[J].click(); }, 3000, i);
    
  3. 这似乎是单击提交按钮。是否正在加载新页面。还是触发 AJAX?如果是这样,这个方案可能只会触发一次或两次。
    链接到目标页面并更好地描述其行为。

于 2012-08-13T08:57:08.700 回答