jQuery live clock工作但冻结浏览器?

时间:2014-08-05 10:27:51

标签: javascript jquery html

所以我为一个时钟制作了一个小脚本,并使用setInterval使其生效。 它工作正常,但问题是它在一分钟左右后冻结我的浏览器。我有点卡住,因为我不知道如何解决这个问题。有人可以帮忙吗? 这是代码:

$(function liveClock(){

var dt = new Date();
var hh = dt.getHours();
var mm = dt.getMinutes();
var ss = dt.getSeconds();
var ampm = "";

if (ss <= 9){ ss = "0"+dt.getSeconds() }
if (mm <= 9){ mm = "0"+dt.getMinutes() }
if (hh > 12){
    hh = hh - 12;
    ampm = "pm";
}else{
    ampm = "am";
}

$("p").html( hh + ":" + mm + ":" + ss + " " + ampm );

setInterval(function(){
  liveClock();
}, 1000);

});

提前致谢

3 个答案:

答案 0 :(得分:5)

每次liveClock运行时,都会启动间隔运行。

您手动运行它。您有一个间隔运行,每秒运行一次。

1秒后,它再次被调用。你现在有两个时间间隔每秒调用它。

2秒后,它再次被调用两次。你现在每隔4个时间间隔调用一次。

3秒。 8个间隔。

4秒。 16个区间。


  • $()替换为setInterval
  • 从功能
  • 中删除setInterval

答案 1 :(得分:0)

我认为这是因为每次运行该功能时都会设置setInterval,所以一分钟后你就会有60个计时器。

您只需设置setInterval一次即可使其正常工作:

function liveClock(){
    var dt = new Date();
    var hh = dt.getHours();
    var mm = dt.getMinutes();
    var ss = dt.getSeconds();
    var ampm = "";

    if (ss <= 9){ ss = "0"+dt.getSeconds() }
    if (mm <= 9){ mm = "0"+dt.getMinutes() }
    if (hh > 12){
        hh = hh - 12;
        ampm = "pm";
    }else{
        ampm = "am";
    }
    $("p").html( hh + ":" + mm + ":" + ss + " " + ampm );
}

$(function() {
    setInterval(function(){
        liveClock();
    }, 1000);
});

JSFiddle:http://jsfiddle.net/76328/

或尝试将其换成setTimeout(),而只会发生一次。

答案 2 :(得分:-2)

试试这个:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script src="Scripts/jquery-1.4.1.min.js"></script>
    <script>
        function liveClock() {
            var today = new Date();
            var h = today.getHours();
            var m = today.getMinutes();
            var s = today.getSeconds();
            m = checkTime(m);
            s = checkTime(s);

            $("p").html(h + ":" + m + ":" + s);
            var t = setTimeout(function () { liveClock() }, 500);
        }
        function checkTime(i) {
            if (i < 10) { i = "0" + i };  // add zero in front of numbers < 10
            return i;
        }
    </script>
</head>

<p></p>

Fiddle here

此代码不会冻结浏览器,我已经检查过它并且完美无缺。希望能够对代码进行投票。