【发布时间】:2015-09-30 15:00:32
【问题描述】:
我有计时器功能,当剩余时间低于特定值时,它会向用户显示prompt 框。
调用代码片段
function countdown(duration, display, show) {
display.innerHTML = toHHMMSS(duration, show);
timer = setTimeout(function(){countdown(duration, display, show);}, 1000);
if(duration<1) {
clearTimeout(timer);
endSession();
}
duration--;
}
function toHHMMSS(duration, show) {
if(duration<300 && show == 1) {
var newMinutes = prompt("This session will expire in 5 minutes. If you want to extend, enter the minutes below");
if(newMinutes == null) {
/* Stop showing the alert box but without affecting the timer */
}
var elem = document.getElementById("timer");
elem.style.color = "Red";
} else {
var elem = document.getElementById("timer");
elem.style.color = "#3BB9FF";
}
var sec_num = parseInt(duration, 10);
var hours = Math.floor(sec_num / 3600);
var minutes = Math.floor((sec_num - (hours * 3600)) / 60);
var seconds = sec_num - (hours * 3600) - (minutes * 60);
if (hours < 10) {
hours = "0" + hours;
}
if (minutes < 10) {
minutes = "0" + minutes;
}
if (seconds < 10) {
seconds = "0" + seconds;
}
var time = hours + ':' + minutes + ':' + seconds;
return time;
}
现在,这允许用户输入一个值,该值最终会添加到他们的计时器中,以使会话运行更长时间。
但是当用户点击 Cancel 时问题就来了。由于此检查驻留在间隔为 1 秒(Timer)的 setTimeout 调用中,因此每秒都会调用一次警报。
我该怎么做才能阻止这种情况的发生,同时又不打破这个功能,因为这也会停止计时器
编辑 添加完整代码
【问题讨论】:
-
全局变量呢?
-
你不能有两个
elses。请修复您的代码,或者这就是您的问题所在? -
什么警报,你在说什么超时?请发布您的完整代码。
-
@Bergi - 首先,没有两个 else,它是一个嵌套的 if。其次,我更新了我的问题并添加了更多与问题相关的代码。
标签: javascript timer prompt