使用clearTimeout(tick)后,我的程序冻结了

时间:2019-02-04 10:26:56

标签: javascript timer

我有以下代码:

var tick;

/* START - timer */
startclock();

/* CLOCK - stop timer */
function stopclock() {
    alert('stop timer');
    clearTimeout(tick);
}

/* CLOCK - start timer */
function startclock() {
    var ut = new Date();
    var h, m;
    var time = "        ";
    var hour;

    h = ut.getHours();
    m = ut.getMinutes();

    if (m <= 9) m = "0" + m; if (h <= 9) h = "0" + h;
    time += h + ":" + m;
    /* EXPIRE - check */
    var day = moment(expire).diff(new Date(), 'days');
    if (day > 0) { hour = moment(expire).diff(new Date(), 'hours') - (day * 24); } else { hour = moment(expire).diff(new Date(), 'hours'); };
    switch (day) {
        case 3:
        case 2:
        case 1:
            /* MESSAGE - expiration */
            $(".authentication_problem_container").css("display", "block");
            $(".authentication_problem_block").html("Your Account Expire: " + day + " Day(s) " + hour + " Hour(s)");
            tick = setTimeout(startclock, 1000);
            break;
        case 0:
            /* AUTHORISATION - error */
            $("#account").css("display", "none");
            $(".cut_off").css("display", "block");
            $(".cut_off_text").html("Your STB is blocked.<br> Call the provider.");
            window.active = 'authorisation';
            /* CLOCK - stop timer */
            stopclock();
            break;
    }
}

/* REMOTE - control codes */
    $(document).keydown(function(e){
        switch(e.keyCode || e.which){
            case 112:
               alert("RED BUTTON PRESSED!");
               break;
            case 113:
               alert("YELLOW BUTTON PRESSED!");
               break;
            case 114:
               alert("BLUE BUTTON PRESSED!");
               break;
        }
    })

我有一个问题,当我收到消息“停止计时器”时,我的程序不再响应。所以我不知道我做错了什么。我阅读了在javascript中使用计时器的在线教程,但这不起作用。

因此,当我按遥控器上的黄色按钮清除计时器之前,我得到了正确的警报“黄色按钮已按下!”之后调用clearTimeout(tick)函数,则所有按钮均无效。

1 个答案:

答案 0 :(得分:0)

问题在于alert(...)函数会阻止其余代码执行,直到您关闭它为止。我测试了您的代码,它对我来说很好用,所以是alert调用冻结了您的代码或某些外部因素,例如您编写的其他代码。