-3

我有一个提交按钮触发功能的表单。让我们称之为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>
4

2 回答 2

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);
于 2012-06-25T19:35:39.910 回答
0

详细说明 Incompl 的答案:

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

超时将评估“timer()”,类似于Eval()函数的工作方式。

setTimeout(toggleSubmit(), 30000);但是,如果您不了解/没有经验,那么做一些事情会产生意想不到的结果。超时必须获取您提供的值,在这种情况下,超时将调用 toggleSubmit() 函数期望它返回一个值(它没有)。所以,我们最终只调用了两次函数,超时没有触发函数。

为了纠正这一点,您必须避免在函数名称后包含“()”。当你这样做时,它充当一个变量,它的值是函数内部的实际代码。

这很好地为您提供了该功能的另一个setTimeout()功能。setTimeout(toggleSubmit, 30000, "hello there", "sir");将调用该toggleSubmit()函数并提供参数“hello there”和“sir”。该函数实际上不接受任何参数,因此它不会对它们做任何事情,但知道这是一件好事。

于 2012-06-25T20:28:04.550 回答