JavaScript计时器禁用功能

时间:2012-06-25 19:26:15

标签: javascript timer onclick

我有一个表单,其中提交按钮触发一个功能。我们称之为ycClick()。我需要在提交后禁用此功能30秒,但我需要提交按钮才能继续工作。我不想要禁用整个按钮,只是它触发的功能。 (如果用户在30秒之前再次点击该按钮,我需要再次提交,但不能再次执行ycClick()。)我已尝试了一百万种不同的东西,但无济于事。最后我觉得我已经接近了,但由于某种原因,它仍然无法正常工作。当我点击它时,ycClick()根本不执行。我究竟做错了什么?这就是我得到的:

function ycClick(){
    ...
}



function toggleSubmit() {
    if (document.getElementById('ycsubmit').onclick == null) {
        document.getElementById('ycsubmit').onclick = ycClick();
    } else {
        document.getElementById('ycsubmit').onclick = null;
    } 
} 


function timer()
{

  if (count <= 0 || count == null)
  {
  ycClick();
  } else {
  count=30;
  counter=setInterval("timer()",1000);
  count=count-1;
 toggleSubmit();
}
}

<FORM ID="myform">
    <INPUT ID="ycsubmit" TYPE="SUBMIT" ONCLICK="timer();">
</FORM>

2 个答案:

答案 0 :(得分:1)

这应该切换按钮:

var isEnabled = true;

function toggleSubmit() {
    if (isEnabled) {
        document.getElementById("ycsubmit").onclick = function() {};
    } else {
        document.getElementById("ycsubmit").onclick = ycClick;
    } 

    isEnabled = !isEnabled;
}

此外,当您使用setInterval时,您不需要timer的括号或引号,如下所示:

counter=setInterval(timer,1000);

更好的是,如果您想等待30秒,只需切换按钮的功能,然后再过30秒再做一次。

toggleSubmit();
setTimeout(toggleSubmit(), 30000);

答案 1 :(得分:0)

详细说明Incompl的回答:

设置超时功能时,它会使用您提供的值。从技术上讲,您的setTimeout("timer()",1000);将完全按照您的意愿行事。

超时将以与Eval()功能相似的方式评估&#34; timer()&#34 ;.

但是,如果您不知情/没有经验,那么执行setTimeout(toggleSubmit(), 30000);之类的操作会产生意想不到的结果。超时必须获取您提供的值的值,在这种情况下,超时将调用toggleSubmit()函数,期望它返回一个值(它不会)。因此,我们最终只调用该函数两次,并且超时没有触发函数。

为了纠正这个问题,你必须避免包括&#34;()&#34;在函数名称之后。执行此操作时,它充当变量,其值是函数内部的实际代码。

这为setTimeout()函数的另一个功能很好地设置了。 setTimeout(toggleSubmit, 30000, "hello there", "sir");将调用toggleSubmit()函数并提供参数&#34;你好那里&#34;和&#34;先生&#34;。该功能实际上并没有采用任何参数,所以它不会对它们做任何事情,但是要知道它是一件好事。