我试图在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
的第一个值。为什么呢?
答案 0 :(得分: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);
}
答案 1 :(得分:1)
问题是:
Auto-eval Strings will not work properly in 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);
}
您似乎想要一个间隔,并用setinterval
两次标记此问题。但是代码使用setTimeout
,它只触发一次而不是每3秒触发一次。也许您想使用setinterval
?
setinterval (function (J) {Next[J].click(); }, 3000, i);
这似乎是点击提交按钮。它是否正在加载新页面。或触发AJAX?如果是这样,这个方案可能只开一次或两次 链接到目标页面并更好地描述其行为。