我有一个表单,其中提交按钮触发一个功能。我们称之为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>
答案 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;。该功能实际上并没有采用任何参数,所以它不会对它们做任何事情,但是要知道它是一件好事。