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