UserScript计时器错误

时间:2012-01-14 07:27:07

标签: javascript greasemonkey userscripts

好的,所以页面上有一个按钮,我正在尝试更改Javascript中倒计时的文本。我对该语言相当新(2天),并且不确定我的代码有什么问题。它不是在再次迭代之前等待整秒,而是立即重新迭代。

var c = 15;
function countDown(e){
  if (c!=0){
     e.value = 'Reply (' + c + ')';
     c--;
     setTimeout(countdown(e),1000);
  }
  else{
     e.value = 'Reply'}
  }
}

但似乎不是像我假设的那样花了15秒,而是一下子全部启动(我在if语句中添加alert('a');证明我可以看到按钮文字正在改变)

我不确定这是Greasemonkey的问题还是我的javascript问题。

1 个答案:

答案 0 :(得分:3)

你的问题在于这一行:

setTimeout(countdown(e),1000);

countdown(e)是对倒计时函数的调用,返回void。 setTimeout函数接受函数引用和超时,因此您需要将其更改为:

setTimeout(countdown, 1000);

您当前的代码是递归调用倒计时(e)15次,然后是setTimeout(void,1000);

如果需要setTimeout将参数(如e)传递给函数,则可以在超时后使用可选参数。

setTimeout(countdown, 1000, e);