总体思路如下:每次按下按钮,都会调用延迟2秒的功能。我可以用新的函数调用停止前一个函数计时器 - 再次按下按钮吗?
例如。
<script>
$('#button').click(function() {
//some logic here
setTimeout(DoSomeOtherLogic, 2000);
});
function DoSomeOtherLogic() {
//some other logic
}
</script>
<div id="button">Button</div>
所以如果我按下&#34;按钮&#34;五次 - 将调用五个延迟为2秒的函数。但是我的想法是,当我停止按下&#34;按钮&#34;时,它应该只执行一次。每按一次按钮的含义 - 它会重置延迟计时器。
有可能吗?
已更新:已从示例中的setTimeout()调用中删除()
。
答案 0 :(得分:4)
(应该是:setTimeout(myFunction, 2000);
没有()
)
$('#button').one("click", myFunction);
function myFunction() {
setTimeout(function(){
console.log("TESSSST");
$('#button').one("click", myFunction);
}, 2000);
}
var myTimeout;
$('#button').click(function() {
clearTimeout( myTimeout );
myTimeout = setTimeout(myFunction, 2000);
});
function myFunction() {
console.log("TESSSST");
}
答案 1 :(得分:2)
尝试使用以下示例的全局软件开关使其正常工作。或者在每个新clearTimeout()
之前使用setTimeout
进行尝试(但使用clearTimeout
不会表明您的功能已完成 - &gt;它可以同时调用多次,因此)。
此解决方案更清晰,因为:
此解决方案更清晰(是的,更多代码)。但它确保被调用函数中的逻辑部分在下一次“点击”传入后完成。 clearTimeout
不这样做。使用clearTimeout
- &gt;它只是清除了运行超时。一旦调用该函数(可能会运行几秒钟),用户将能够再次单击该按钮,这将触发新的超时(功能代码未完成!)。 以下解决方案确保在超时完成后调用函数,然后再开始另一次超时。
<script type="text/javascript">
var globalState = false;
$('#button').click(function() {
//some logic here
if (!globalState) {
globalState = true;
setTimeout(DoSomeOtherLogic, 2000);
}
});
function DoSomeOtherLogic() {
//some other logic
//reset switch after logic is done
globalState = false;
}
</script>