Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.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 jQuery实时时钟工作但冻结浏览器?_Javascript_Jquery_Html - Fatal编程技术网

Javascript jQuery实时时钟工作但冻结浏览器?

Javascript jQuery实时时钟工作但冻结浏览器?,javascript,jquery,html,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 <=

因此,我为一个时钟制作了一个小脚本,并使用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);

});
$(函数liveClock(){
var dt=新日期();
var hh=dt.getHours();
var mm=dt.getMinutes();
var ss=dt.getSeconds();
var ampm=“”;

如果(ss每次
liveClock
运行时,它都会启动一个间隔运行

您可以手动运行它。您有一个每秒钟运行一次的间隔

1秒后,它会再次被调用。现在,您有两个间隔,每秒钟调用一次

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

3秒,8次间隔

4秒,16次间隔

等等


  • $()
    替换为
    setInterval
  • 从函数内部删除
    setInterval
试试这个:

<!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>

函数liveClock(){
var today=新日期();
var h=today.getHours();
var m=today.getMinutes();
var s=today.getSeconds();
m=检查时间(m);
s=检查时间(s);
html(h+“:“+m+”:“+s);;
var t=setTimeout(函数(){liveClock()},500);
}
功能检查时间(i){
如果(i<10){i=“0”+i};//在<10的数字前面加零
返回i;
}


这段代码不会冻结浏览器,我已经检查过了,它工作得很好。希望能为这段代码投票。

我想这是因为每次运行函数时都要设置
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);
});
函数liveClock(){
var dt=新日期();
var hh=dt.getHours();
var mm=dt.getMinutes();
var ss=dt.getSeconds();
var ampm=“”;

如果(s)为什么它被包装在<代码> $()?不应该吗?它是我每次调用LIFECKORDER()时调用PaGeStEffice(…)的唯一脚本。要么更改算法,要么考虑使用StimeTimeOut.(…)相反。我想如果你在等待文档准备好,那没关系,但是你也可以将脚本块作为最后一个标记放在正文中,并免费获得相同的效果。@johnheridan看起来不错。我可以肯定地活一个小时。jk谢谢你:D
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);
});