у меня есть функция countdown (), определенная в статическом js-файле, main.js:
function countdown() {
var tID = window.setInterval( function() {
var t = $("#countdown").html();
$('#countdown').html(--t);
if (t <= 0) {
window.clearInterval(tID);
$("a.about").trigger("click");
}
}, 1000 );
}
У меня также есть следующее в содержании страницы:
<div id="content">
<p>Sorry, but no page was found here. Redirecting you to the <a href="/">home</a> page in <span id="countdown">25</span></p>
<script type="text/javascript">
countdown();
</script>
</div>
#content
изначально скрыт и отображается с помощью jQuery (после загрузки с AJAX). по какой-то причине это приводит к тому, что блок <script>
выполняется дважды - один раз, когда содержимое равно display:none
, и один раз, когда вызывается функция показа jQuery. Таким образом, мой таймер отсчитывает 2 секунды за раз. (на самом деле 1 за раз, но 2 итерации происходят почти одновременно.) Если вместо анимации отображения div я просто выполняю $('#container').css('display','block');
, код правильно создает один интервал. Кто-нибудь может объяснить это?
У меня есть пример, продемонстрированный в jsFiddle здесь