试图弄清楚如何使用这个JQuery脚本正确使用setInterval

时间:2010-09-04 01:35:54

标签: javascript jquery datetime

这是previous question I asked yesterday的延续。

我正在尝试根据预先确定的时间值显示时钟..而不是当前的客户端时间。

这是我的JQuery ......

$(document).ready(function () {
    var currentTime = new Date('3/09/2010 9:27:29 PM');
    setInterval("DisplayTime(currentTime, $('.answer-body'))", 1000);
})

function DisplayTime(currentTime, destination) { ... }

现在在DisplayTime函数中,我显示了一些自定义文本,调用destintion.html(..)来显示该自定义文本。 KEWL。最后,在我显示文本后,我正在考虑将 1秒添加到currentTime,所以当间隔的下一次迭代时,它不是使用原始时间值,而是1秒后

问题:我无法将currentTime变量传递给setInterval函数。我不是特别希望在这里有一个匿名功能..除非我别无选择。

有人可以帮助我或重构我的错误代码吗?

所以每一秒都会重新显示时间,并添加新的第二个。

2 个答案:

答案 0 :(得分:5)

相反,你在这里使用匿名函数,如下所示:

setInterval(function() {
  DisplayTime(currentTime, $('.answer-body'));
}, 1000);

如果您可以避免将字符串传递给setInterval()setTimeout(),它会执行eval()并且会出现范围问题,例如您当前遇到的问题,因为currentTime不是全局变量。

答案 1 :(得分:1)

$(document).ready(function () {
    var currentTime = new Date('3/09/2010 9:27:29 PM');
    var destination = $('.answer-body');
    function DisplayTime()
    { 
      destination.html(currentTime);
      currentTime.setTime(currentTime.getTime() + 1000);
    }
    var id = setInterval(DisplayTime, 1000);
})

这在函数中使用函数(闭包),但不是匿名函数。无法从外部范围访问DisplayTime。没有理由不喜欢使用匿名函数。我会在这里使用一个。