Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.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 clearInterval正在加速计时器,而不是暂停计时器_Javascript_Jquery_Coldfusion_Setinterval_Clearinterval - Fatal编程技术网

Javascript clearInterval正在加速计时器,而不是暂停计时器

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(“停止计时器”); 计时器

我正在开发一个ColdFusion应用程序,它需要一个可以启动、暂停和清除的计时器。我的问题是,尽管它在IE9、Firefox、Opera、Chrome和Safari中工作得非常好,但在IE8(这是我用户群的一大块)中却无法工作。问题是,当我点击并尝试停止计时器时,而不是计时器停止,它会加速。它只在IE8中使用(其他浏览器也可以)

--时钟代码--

功能检查\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”类型

或者只需为超时变量使用另一个名称。

请查看此处:

  • 例如,即使将间隔设置为1秒,也不一定是两次调用之间的1秒
  • 对于超时和间隔,始终传入函数,而不是字符串:
    setInterval(increaseCounter,1000)
  • 没有理由解析DOM中的值。这样做效率太低了。如果改为使用日期差异,则只需存储一个变量(开始时间),并从该时间获得小时/分钟/秒。您可以随时更新视图,并且始终保持准确
  • 我个人更喜欢“递归”超时,而不是间隔。对于间歇,当你想让间歇停止时,你总是需要采取额外的步骤来清除间歇。您可以通过几种不同的方式停止超时循环,并且更容易理解发生了什么。超时还允许我们灵活地更改通话间隔时间(与此无关)
  • 将事件处理程序内联绑定(在HTML元素上)被认为是一种不好的做法。如果您已经在使用jQuery,那么就没有理由这样做了,因为jQuery使过程变得非常简单
  • 我去掉了你的“addZero”跨距。我不知道你在用它们做什么,但它们不是必需的,只是用来弄乱标记 HTML:

    请看这里:

  • 例如,即使将间隔设置为1秒,也不一定是两次调用之间的1秒
  • 对于超时和间隔,始终传入函数,而不是字符串:
    setInterval(increaseCounter,1000)
  • 没有理由解析DOM中的值。这样做效率太低了。如果改为使用日期差异,则只需存储一个变量(开始时间),并从该时间获得小时/分钟/秒。您可以随时更新视图,并且始终保持准确
  • 我个人更喜欢“递归”超时,而不是间隔。对于间歇,当你想让间歇停止时,你总是需要采取额外的步骤来清除间歇。您可以通过几种不同的方式停止超时循环,并且更容易理解发生了什么。超时还允许我们灵活地更改通话间隔时间(与此无关)
  • 将事件处理程序内联绑定(在HTML元素上)被认为是一种不好的做法。如果您已经在使用jQuery,那么就没有理由这样做了,因为jQuery使过程变得非常简单
  • 我去掉了你的“addZero”跨距。我不知道你在用它们做什么,但它们不是必需的,只是用来弄乱标记 HTML:


    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);
            }
        });
    })();