问题描述
||
我一直在玩一个站点,在该站点中,我想继续在每ѭ1秒内单击一次按钮ѭ0次。
我的代码是:
clickbidBtn1 = function() {
var bidBtn=document.getElementById(\"BidButton\");
var interval = 15000;
for (var i=3; i>=0; i--){
setTimeout(bidBtn.click(1);,i*interval);
};
我发现GM同时执行所有“ 0”次点击,而不是故意延迟。有没有办法延迟点击时间?假设我希望该功能每15秒单击一次按钮0次。
我当时想给它更多的变量,并在settimeout
代码部分中添加一个变量,该部分仅在单击时执行,然后将增加的变量与当前变量进行比较,然后再转到下一个settimeout
...但没有想到通过...似乎是一个简单过程的复杂过程... :(我会玩一点
解决方法
为此使用ѭ7。
单程:
var bidClickTimer = 0;
var numBidClicks = 0;
function clickbidBtn1 ()
{
var interval = 15000;
bidClickTimer = setInterval (function() {BidClick (); },interval);
}
function BidClick ()
{
numBidClicks++;
if (numBidClicks > 3)
{
clearInterval (bidClickTimer);
bidClickTimer = \"\";
}
else
{
bidBtn.click (1);
}
}
clickbidBtn1 ();
或者,不使用全局变量:
function clickbidBtn1 ()
{
var interval = 15000;
this.numBidClicks = 0;
this.bidClickTimer = 0;
this.BidClick = function () {
numBidClicks++;
if (numBidClicks > 3)
{
clearInterval (bidClickTimer);
bidClickTimer = \"\";
}
else
{
bidBtn.click (1);
}
};
this.bidClickTimer = setInterval (function(thisScope) {thisScope.BidClick (); },interval,this);
}
clickbidBtn1 ();
,只是为了说明您的代码为什么不起作用:您正在立即调用.click
方法(在函数名称调用该函数之后输入()
),并且实际上将该函数的返回值传递给setTimeout
。 for
循环是如此之快,以至于所有事情似乎都是同时发生的。
您必须将函数引用传递给setTimeout
,例如匿名函数:
setTimeout(function() {
bidBtn.click(1);
},i*interval);