我花了一段很长时间才弄明白这个问题。我有一张表格。
<form id="form1" .. target="right" action="blablah">
<input .. />
<input type="submit" id="ycsubmit" onclick="..." value="Go!" />
</FORM>我有一个需要在提交时执行的函数: ycClick();
一旦执行了ycClick(),我需要将onClick切换为null 30秒,然后再切换回来,这样如果在30秒后再次按下,它将再次执行ycClick(),然后禁用它30秒,依此类推。我已经尝试了100种不同的方法,但我现在得到的是:
function ycClick(){
...
}
var isEnabled = true;
function toggleSubmit() {
if (isEnabled = true) {
document.getElementById("ycsubmit").onclick = null;
} else {
document.getElementById("ycsubmit").onclick = timer();
}
//isEnabled = !isEnabled;
}
function timer(){
ycClick();
toggleSubmit();
setTimeout("toggleSubmit()", 30000);
}然后将onclick设置为触发timer();这将关闭timer(),后者会关闭ycClick(),然后将onclick切换为null,但在30秒后不会将其切换回来。我怀疑这与这句话有关:
isEnabled = !isEnabled;但是移除并没有什么不同,它的操作仍然是一样的。
发布于 2012-06-26 09:13:43
你可以这样做:
function ycClick () {
var timestamp = +( new Date );
if ( ycClick.timestamp && timestamp - ycClick.timestamp < 30000 ) return;
ycClick.timestamp = timestamp;
// the actual code of the function
}现场演示: http://jsfiddle.net/znKRC/7/
在我的演示中,重复单击该按钮,您会注意到该函数的第二部分每3秒才执行一次。因此,上述函数的前三行确保仅当后续代码在最后30秒内未执行时才执行它。
发布于 2012-06-26 09:04:52
有许多方法可以改进您的代码;其中一些是简单的错误,另一些则表明您应该学习DOM和JavaScript运行时的其他一些特性。以下是我注意到的,按顺序排列:
错误
if (isEnabled = true){时犯了一个常见的错误。单个=是一个赋值,因此您的代码不会测试isEnabled是否为真。相反,它将测试赋值的结果,该结果始终为true。使用一个等于===的三元组来测试isEnabled当前是否为真。(您还将看到double equals ==__,但此运算符可能具有意想不到的效果且不太严格,因此应尽量避免使用它。)document.getElementById("ycsubmit").onclick = timer();行上,您应该在timer之后去掉括号。有了括号,您就可以执行timer 函数,而不是将引用分配给该函数。onclick方法将被设置为timer的返回值,因为您没有指定return语句,所以onclick的返回值将是false。我们永远不会将isEnabled设置为false!在当前设置中,您应该将isEnabled = !isEnabled行留在!中
方法问题
发布于 2014-05-13 01:58:09
简单的答案是使用函数“JavaScript (){},t)”,其中setTimeout是要执行的命令,t=以毫秒为单位的时间。
此外,您可能想要设置对象样式以隐藏元素。
https://stackoverflow.com/questions/11199456
复制相似问题