如何在javascript函数中清除时间

时间:2013-03-27 18:10:27

标签: javascript ajax jquery

我有两个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);        
    }

如果这是我应该做的事情?因为两个功能都将被激活,我不知道如何在启用一个功能时关闭超时

1 个答案:

答案 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;