我有两个javascript函数,都可以处理click事件。对于我使用set time out属性的每个函数。问题是如果调用第一个函数并调用第二个函数,则两个超时都会一起激活。有没有办法在启用一个功能时禁用一个功能的定时器。
SCRIPT:
function overall(){
$(".one").show();
$(".two").hide();
$(".three").hide();
$(".four").hide();
setTimeout(overall,1000);
}
function mobile(){
$(".one").hide();
$(".two").show();
$(".three").hide();
$(".four").hide();
setTimeout(mobile,1000);
}
如果这是我应该做的事情?因为两个功能都将被激活,我不知道如何在启用一个功能时关闭超时
答案 0 :(得分:3)
setTimeout
返回一个值(“计时器句柄”),这是0
以外的数字。您可以通过在超时发生之前将该值传递给clearTimeout
来取消计时器。
因此,您可以记住您计划的一个或两个计时器的计时器句柄(取决于您的需要),当发生某些事情使您想要取消其中一个计时器时,请致电clearTimeout
与相关的句柄。
你问了一个例子。由于我仍然完全不清楚你想取消什么,我会猜测:你想要拨打overall
来取消对mobile
的任何待处理电话,反之亦然:
// Variables to hold the timers
var overallTimer = 0,
mobileTimer = 0;
function overall(){
// If a pending call to mobile exists, cancel it
if (mobileTimer) {
clearTimeout(mobileTimer);
mobileTimer = 0;
}
$(".one").show();
$(".two").hide();
$(".three").hide();
$(".four").hide();
// Schedule a call to ourselves, remember the timer handle
overallTimer = setTimeout(overall,1000);
}
function mobile(){
// If a pending call to overall exists, cancel it
if (overallTimer) {
clearTimeout(overallTimer);
overallTimer = 0;
}
$(".one").hide();
$(".two").show();
$(".three").hide();
$(".four").hide();
// Schedule a call to ourselves, remember the timer handle
mobileTimer = setTimeout(mobile,1000);
}
如果您愿意,可以将定时器存储在功能上,尽管它并没有给您带来太多的好处:
function overall(){
// If a pending call to mobile exists, cancel it
if (mobile.timer) {
clearTimeout(mobile.timer);
mobile.timer = 0;
}
$(".one").show();
$(".two").hide();
$(".three").hide();
$(".four").hide();
// Schedule a call to ourselves, remember the timer handle
timer = setTimeout(overall,1000);
}
overall.timer = 0;
function mobile(){
// If a pending call to overall exists, cancel it
if (overall.timer) {
clearTimeout(overall.timer);
overall.timer = 0;
}
$(".one").hide();
$(".two").show();
$(".three").hide();
$(".four").hide();
// Schedule a call to ourselves, remember the timer handle
mobile.timer = setTimeout(mobile,1000);
}
mobile.timer = 0;