Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 尽管我很努力,递归时钟还是在滴答作响?_Javascript_Clock - Fatal编程技术网

Javascript 尽管我很努力,递归时钟还是在滴答作响?

Javascript 尽管我很努力,递归时钟还是在滴答作响?,javascript,clock,Javascript,Clock,我有一个时钟,我想保持滴答作响,除非我把“打破”在“秒”参数。当我按下“break”键时,时钟会中断一秒钟,然后继续滴答作响。我想让它停止滴答作响,但我不知道问题出在哪里。作为记录,我在页面加载时调用此函数,然后每当用户单击页面上的元素时调用此函数。当他们点击某个东西后,事情变得很糟糕 var seconds; function countdown_clock(seconds) { if (seconds != "break") { countdown(seconds)

我有一个时钟,我想保持滴答作响,除非我把“打破”在“秒”参数。当我按下“break”键时,时钟会中断一秒钟,然后继续滴答作响。我想让它停止滴答作响,但我不知道问题出在哪里。作为记录,我在页面加载时调用此函数,然后每当用户单击页面上的元素时调用此函数。当他们点击某个东西后,事情变得很糟糕

var seconds;

function countdown_clock(seconds) {
    if (seconds != "break") {
        countdown(seconds);

        seconds = seconds;
    }
}

function displaymessage() {
    alert("Your Time Has Expired");
}

function countdown(seconds) {
    if (seconds != "break") {
        Time_Left = seconds;
        format = 1;

        if (Time_Left < 0)
            Time_Left = 0;

        switch (format) {
            case 0:
                //The simplest way to display the time left.
                $("div#ClockCountdown").html(Time_Left + ' seconds');
                break;
            case 1:
                //More detailed.
                Next_time = Time_Left - 1;
                minutes = Math.floor(Time_Left / 60);
                Time_Left %= 60;
                seconds = Time_Left;

                mps = 's';
                sps = 's';
                earlyzero = '';
                latezero = '';
                //ps is short for plural suffix.

                if (minutes == 1) mps = '';
                if (seconds == 1) sps = '';
                if (seconds < 10) earlyzero = '0';
                //                    if(seconds == 10) latezero ='0';

                //                    document.all.countdown.innerHTML = minutes + ' minute' + mps + ' and ';
                //                    document.all.countdown.innerHTML += seconds + ' second' + sps;

                innerHTML = minutes + ':';
                innerHTML += earlyzero + seconds;
                $("div#ClockCountdown").html(innerHTML + "nonbroken!");
                break;
            default:
                $("div#ClockCountdown").html(Time_Left + ' seconds');
        }

        if (Next_time == 0) {
            displaymessage();
            window.location.href = "navigation.php?nav=video_timeout";
        }
        else {
            setTimeout('countdown(' + Next_time + ');', 1000);
        }
    }
}
var秒;
功能倒计时时钟(秒){
如果(秒!=“中断”){
倒计时(秒);
秒=秒;
}
}
函数displaymessage(){
提醒(“您的时间已过”);
}
功能倒计时(秒){
如果(秒!=“中断”){
剩余时间=秒;
格式=1;
如果(左时间<0)
剩余时间=0;
开关(格式){
案例0:
//显示剩余时间的最简单方法。
$(“div#ClockCountdown”).html(剩余时间+秒);
打破
案例1:
//更详细。
下一次=左一次-1;
分钟=数学楼层(剩余时间/60);
剩余时间%=60;
秒=剩余时间;
mps=‘s’;
sps=‘s’;
earlyzero='';
latezero='';
//ps是复数后缀的缩写。
如果(分钟==1)mps='';
如果(秒==1)sps='';
如果(秒<10)earlyzero='0';
//如果(秒==10)延迟为0';
//document.all.countdown.innerHTML=minutes+'minute'+mps+'和';
//document.all.countdown.innerHTML+=seconds+“second”+sps;
innerHTML=minutes+':';
innerHTML+=earlyzero+秒;
$(“div#ClockCountdown”).html(innerHTML+“nonbreak!”);
打破
违约:
$(“div#ClockCountdown”).html(剩余时间+秒);
}
如果(下一次==0){
displaymessage();
window.location.href=“navigation.php?nav=video\u超时”;
}
否则{
setTimeout('倒计时('+Next_time+);',1000);
}
}
}

您还必须清除超时。这样做:

var timeout;
function countdown(seconds) {
    if (seconds == "break") {
        clearTimeout(timeout);
    }
    // other things
    if( Next_time == 0) {
        displaymessage();
        window.location.href ="navigation.php?nav=video_timeout";
    } else {
        timeout = setTimeout('countdown(' + Next_time + ');', 1000);
    }
}

您还必须清除超时。这样做:

var timeout;
function countdown(seconds) {
    if (seconds == "break") {
        clearTimeout(timeout);
    }
    // other things
    if( Next_time == 0) {
        displaymessage();
        window.location.href ="navigation.php?nav=video_timeout";
    } else {
        timeout = setTimeout('countdown(' + Next_time + ');', 1000);
    }
}

超时是一次放炮,调用超时函数时会清除超时。仅当秒数为时,才应设置下一个超时!='打断“:

    if (Next_time == 0) {
        displaymessage();
        window.location.href = "navigation.php?nav=video_timeout";
    }
    else if (seconds !== 'break') {
        setTimeout('countdown(' + Next_time + ');', 1000);
    }

超时是一次放炮,调用超时函数时会清除超时。仅当秒数为时,才应设置下一个超时!='打断“:

    if (Next_time == 0) {
        displaymessage();
        window.location.href = "navigation.php?nav=video_timeout";
    }
    else if (seconds !== 'break') {
        setTimeout('countdown(' + Next_time + ');', 1000);
    }

看看这个例子@Karl Weisshaupt@arxanas提到您需要清除超时。因为在您发送中断命令时,可能已经有对
倒计时
函数的调用在队列中等待或计划执行。这个电话会让你的超时时间一直在滴答作响。因此,考虑清除超时。看看这个例子…@Karl Weisshaupt@arxanas提到您需要清除超时。因为在您发送中断命令时,可能已经有对
倒计时
函数的调用在队列中等待或计划执行。这个电话会让你的超时时间一直在滴答作响。所以,考虑清除超时。但是如果秒等于中断,我不能清除超时吗?你是对的。不管出于什么原因,我愚蠢地认为,
if(seconds!=“break”)
是中断逻辑。但是如果seconds等于break,我不会清除超时吗?呃,你是对的。不管出于什么原因,我愚蠢地认为,
if(seconds!=“break”)
是中断逻辑。