Застрял, пытаясь понять, как правильно использовать setInterval с этим сценарием JQuery - PullRequest
2 голосов
/ 04 сентября 2010

это продолжение предыдущего вопроса, который я задал вчера .

Я пытаюсь отобразить часы на основе заранее определенного значения времени .. не текущие клиенты время.

вот мой 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 ]

5 голосов
/ 04 сентября 2010

Напротив, вы должны использовать здесь анонимную функцию, например:

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

Никогда не передавайте строку в setInterval()или setTimeout(), если вы можете избежать этого, он выполняет eval() и имеет проблемы с областью действия, как и тот, который вы испытываете в настоящее время, поскольку currentTime не является глобальной переменной.

1 голос
/ 04 сентября 2010
$(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 не будет доступно извне.Нет никакой реальной причины не любить анонимные функции, используемые должным образом.Я бы использовал один здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...