Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.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 建议一种每分钟更新时间的方法_Javascript_Jquery_Time - Fatal编程技术网

Javascript 建议一种每分钟更新时间的方法

Javascript 建议一种每分钟更新时间的方法,javascript,jquery,time,Javascript,Jquery,Time,我有一个完整的ajax应用程序。我使用下面的代码每分钟更新一次时间。但如果我将浏览器保持打开状态>10分钟,浏览器将变得无响应/速度慢。建议一个更好的代码 function tick() { var d = new Date(); var time = padNumber(d.getHours(),2)+':'+padNumber(d.getMinutes(),2); $('#WeatherBoLfTime').html(' '+time); t

我有一个完整的ajax应用程序。我使用下面的代码每分钟更新一次时间。但如果我将浏览器保持打开状态>10分钟,浏览器将变得无响应/速度慢。建议一个更好的代码

function tick()
{
    var d = new Date();
    var time = padNumber(d.getHours(),2)+':'+padNumber(d.getMinutes(),2);
    $('#WeatherBoLfTime').html(' '+time);
    t = setInterval('tick()',60000);
}

$(document).ready(function(){
    tick();
})

问题是您多次调用
setInterval
,但从未清除其中任何一个。因此,一段时间后,您将有大量的间隔回调同时运行

改变

t = setInterval('tick()',60000);

当我第一次开始编写JavaScript时,我用AJAX调用关闭了LycosWeb服务器,因为我犯了同样的错误:-)


请注意,由于显示的是实际时间,因此应该使用比1分钟短得多的计时器。如果我在13:42:30登陆你的网页,时间将在~13:43:30之前更新。要使其与机器的时间保持同步,您可能需要为
1000

setInterval()
设置一个时间间隔。您只需设置一次,它将自动每60000毫秒调用一次
setTimeout()
是您每次都必须重新设置的设置。

正如其他人所指出的,您每次都在创建新的间隔。 把它移到你的功能之外

function tick()
{
    var d = new Date();
    var time = padNumber(d.getHours(),2)+':'+padNumber(d.getMinutes(),2);
    $('#WeatherBoLfTime').html(' '+time);
}

$(document).ready(function(){
    t = setInterval(tick,60000);
})

编辑:我很慢,其他答案似乎正在更新。所以这一个现在没用了:)

看看下面的演示代码,它将每秒更新一次。。。

J
函数myFunction()
{
setInterval(函数(){
var d=新日期();
document.getElementById(“dates”).innerHTML=新日期(d.getTime();},1000);
}

确定


这将导致计时器只运行一次。@Johan:不,因为这是一个递归计时器调用。请正确阅读代码。当用户将计算机置于睡眠状态,然后再将其打开时,代码就会中断。见下文。@frenchie:OP没有要求与服务器保持时间同步。堆栈溢出现在似乎到处都是无法正确阅读的人。请收回您的否决票。@AndyE:这样做的目的不是让页面与服务器保持同步,而是将服务器用作固定的参考点,使页面与自身保持同步。如果您仅依赖设置超时,请参阅“隐藏使用
eval
”,当用户将其计算机置于睡眠状态,然后稍后将其重新打开时,您的代码将中断。见下文;你需要的不仅仅是设置超时!当用户将其计算机置于睡眠状态,然后稍后将其重新打开时,该功能将中断。请参见下文。@frenchie:除非setInterval实际上完全停止运行(这会弄乱所有方法),否则这将起作用。时间可能会过期一分钟,直到tick再次运行,但当它运行时,时间将被正确设置(因为它会在每次显示时获取时间,而不仅仅是增加已经存在的时间)。@frenchie:没有提到当客户端进入睡眠时它必须工作。我的答案适用于给定的问题。像所有其他人一样。没有必要投否决票。当用户让电脑进入睡眠状态,然后再打开电脑时,否决票就失效了。见下文。
function tick()
{
    var d = new Date();
    var time = padNumber(d.getHours(),2)+':'+padNumber(d.getMinutes(),2);
    $('#WeatherBoLfTime').html(' '+time);
}

$(document).ready(function(){
    t = setInterval(tick,60000);
})