Mansolid
@Mansolid
Начинающий вебмастер

Почему не работает счётчик JS?

Привет, кто подскажет почему не работает count.js - это отсчёт до определённой даты, по идее как мне кажется этот счётчик должен идти в реальном времени, а он изменяется только при обновлении страницы, и второй вопрос при наступлении даты, например сегодня не выводится сообщение с наступившей датой, а счётчик продолжает отсчитывать в "минус", последняя версия jquery.min.js 3.2.1 подключена. Понятно, что до Нового Года ещё далеко, но и счётчик не только для этого можно использовать.
spoiler

Подключение счётчика в HEAD:
<script src="/js/count.js" type="text/javascript"></script>

Вывод счётчика в BODY:<div ID="count"></div>
Сам счётчик: count.js
$(document).ready(function() {
var current="Наступил Новый Год!"
var montharray=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec")

function countdown(yr,m,d)
{
	theyear=yr;
	themonth=m;
	theday=d;

	var today=new Date()
	var todayy=today.getYear()
	if (todayy < 1000)
	todayy+=1900
	var todaym=today.getMonth()
	var todayd=today.getDate()
	var todayh=today.getHours()
	var todaymin=today.getMinutes()
	var todaysec=today.getSeconds()
	var todaystring=montharray[todaym]+" "+todayd+", "+todayy+" "+todayh+":"+todaymin+":"+todaysec
	futurestring=montharray[m-1]+" "+d+", "+yr
	dd=Date.parse(futurestring)-Date.parse(todaystring)
	dday=Math.floor(dd/(60*60*1000*24)*1)
	dhour=Math.floor((dd%(60*60*1000*24))/(60*60*1000)*1)
	dmin=Math.floor(((dd%(60*60*1000*24))%(60*60*1000))/(60*1000)*1)
	dsec=Math.floor((((dd%(60*60*1000*24))%(60*60*1000))%(60*1000))/1000*1)
	var tdays=" д. "
	var thours=" ч. "
	var tmin=" м. "
	var tsec=" c. "

	if (dday>4&&dday<21)
	{
		tdays=" дней "
	}
	else if((dday>1&&dday<5)||(dday%10>1&&dday%10<5)) 
	{
		tdays=" дня "
	}
	else if(dday==1||dday%10==1) 
	{
		tdays=" день "
	}
	else if ((dday%10>4&&dday%10<=9)||dday%10==0)
	{
		tdays=" дней "
	}
	
	if (dhour>4&&dhour<21)
	{
		thours=" часов "
	}
	else if((dhour>1&&dhour<5)||(dhour%10>1&&dhour%10<5)) 
	{
		thours=" часа "
	}
	else if(dhour==1||dhour%10==1) 
	{
		thours=" час "
	}
	else if ((dhour%10>4&&dhour%10<=9)||dhour%10==0)
	{
		thours=" часов "
	}

	if (dmin>4&&dmin<21)
	{
		tmin=" минут "
	}
	else if((dmin>1&&dmin<5)||(dmin%10>1&&dmin%10<5)) 
	{
		tmin=" минуты "
	}
	else if(dmin==1||dmin%10==1) 
	{
		tmin=" минута "
	}
	else if ((dmin%10>4&&dmin%10<=9)||dmin%10==0)
	{
		tmin=" минут "
	}
	if (dsec>4&&dsec<21)
	{
		tsec=" секунд "
	}
	else if((dsec>1&&dsec<5)||(dsec%10>1&&dsec%10<5)) 
	{
		tsec=" секунды "
	}
	else if(dsec==1||dsec%10==1) 
	{
		tsec=" секунда "
	}
	else if ((dsec%10>4&&dsec%10<=9)||dsec%10==0)
	{
		tsec=" секунд "
	}
	if (dday==0&&dhour==0&&dmin==0&&dsec==1)
	{
		document.title = current
		return
	}
	else
	{
	 document.getElementById("count").innerHTML=dday+tdays+dhour+thours+dmin+tmin+dsec+tsec
	 //document.title = "До Нового Года осталось "+dday+tdays+dhour+thours+dmin+tmin+dsec+tsec
	 setTimeout("countdown(theyear,themonth,theday)",1000)
	}
}
//Настроить дату в формате год/месяц/день
countdown(2017,05,23)
});
  • Вопрос задан
  • 215 просмотров
Решения вопроса 1
@JuniorNoobie
Сижу в поддержке, пишу мелкие проекты
А что пишется в консоли разработчика при запуске? Скорее всего ругается на превышение размера callstack, т.е. превышен максимум рекурсивных вызовов. Да к тому же еще и в setTimeout вызываете функцию до конца вызова...
Перепишите функцию, чтобы она выводила счетчик от текущей даты (расчет прямо в функции) и вызывайте ее в setTimeout.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Попробуй setInterval.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы