Javascript clearInterval正在加速计时器,而不是暂停计时器
我正在开发一个ColdFusion应用程序,它需要一个可以启动、暂停和清除的计时器。我的问题是,尽管它在IE9、Firefox、Opera、Chrome和Safari中工作得非常好,但在IE8(这是我用户群的一大块)中却无法工作。问题是,当我点击并尝试停止计时器时,而不是计时器停止,它会加速。它只在IE8中使用(其他浏览器也可以) --时钟代码--Javascript clearInterval正在加速计时器,而不是暂停计时器,javascript,jquery,coldfusion,setinterval,clearinterval,Javascript,Jquery,Coldfusion,Setinterval,Clearinterval,我正在开发一个ColdFusion应用程序,它需要一个可以启动、暂停和清除的计时器。我的问题是,尽管它在IE9、Firefox、Opera、Chrome和Safari中工作得非常好,但在IE8(这是我用户群的一大块)中却无法工作。问题是,当我点击并尝试停止计时器时,而不是计时器停止,它会加速。它只在IE8中使用(其他浏览器也可以) --时钟代码-- 功能检查\u定时器(){ if($('#timer').hasClass('start')){ $('计时器').val(“停止计时器”); 计时器
功能检查\u定时器(){
if($('#timer').hasClass('start')){
$('计时器').val(“停止计时器”);
计时器=设置间隔(“递增计数器()”,1000);
$(“#计时器”).removeClass('start'))
}
否则{
if(计时器类型!=“未定义”){
清除间隔(计时器);
}
$('#timer').val(“启动计时器”);
$('#timer').addClass('start'))
}
}
函数递增计数器(){
var-secVal;
var minVal;
secVal=parseInt($('#counterSec').html(),10)
minVal=parseInt($('#counterMin').html(),10)
如果(secVal!=59){
secVal=secVal+1;
如果(秒<10){
secVal=secVal.toString();
secVal=“0”+secVal;
}
$('#counterSec').html(secVal);
}
否则{
如果(最小值!=59){
minVal=minVal+1;
如果(最小值<10){
minVal=minVal.toString();
minVal=“0”+minVal;
}
$('#counterMin').html(minVal);
}
否则{
$('计数器小时').html((parseInt($('计数器小时').html(),10)+1));
$('#counterMin').html(“00”);
}
$('#counterSec').html(“00”);
}
}
--包含时钟的DIV--
00
:
00
:
00
--启动时钟的按钮--
将其添加到脚本顶部(函数之外): 否则,您将永远不会遇到此分支:
if(typeof timer != "undefined")
原因:有一个ID为“timer”的元素,您可以使用timer
访问它,而无需建议的修改,并且timer永远不会是“undefined”类型
或者只需为超时变量使用另一个名称。将其添加到脚本顶部(函数之外): 否则,您将永远不会遇到此分支:
if(typeof timer != "undefined")
原因:有一个ID为“timer”的元素,您可以使用timer
访问它,而无需建议的修改,并且timer永远不会是“undefined”类型
或者只需为超时变量使用另一个名称。请查看此处:
setInterval(increaseCounter,1000)
setInterval(increaseCounter,1000)
1) 例如,即使将间隔设置为1秒,也不一定是两次调用之间的1秒。2) 对于超时和间隔,请始终传入函数,而不要传入字符串:
setInterval(increaseCounter,1000)
1)即使将间隔设置为(例如)1秒,调用之间也不一定是1秒。2) 对于超时和间隔,始终传入函数,而不是字符串:setInterval(increaseCounter,1000)
@Christoph需要解释什么?这段代码很容易解释
<input type="button" id="timer" class="start" value="Start Timer" onclick="check_timer()">
var timer;
if(typeof timer != "undefined")
<div class="supportClock" style="width:150px; border-radius:20px;" align="center">
<span id="counterHour">00</span>
: <span id="counterMin">00</span>
: <span id="counterSec">00</span>
</div>
<input type="button" id="timer" class="start" value="Start Timer">
(function(){
var clock = $(".supportClock"),
hr = $("#counterHour"),
min = $("#counterMin"),
sec = $("#counterSec"),
running = false,
startTime,
timeout;
function updateClock(){
var time = (new Date()) - startTime,
hrs = Math.floor(time / 1000 / 60 / 60),
mins = Math.floor(time / 1000 / 60 - hrs * 60),
secs = Math.floor(time / 1000 - mins * 60 - hrs * 60 * 60);
hr.text(hrs > 9 ? hrs : '0' + hrs);
min.text(mins > 9 ? mins: '0' + mins);
sec.text(secs > 9 ? secs : '0' + secs);
timeout = setTimeout(updateClock, 1000/2);
}
$("#timer").click(function(){
if (!running){
running = true;
this.value = "Stop Timer";
startTime = new Date();
updateClock();
}
else{
running = false;
this.value = "Start Timer";
clearTimeout(timeout);
}
});
})();