Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.04.2011, 14:52
Новичок на форуме
Отправить личное сообщение для tenorica Посмотреть профиль Найти все сообщения от tenorica
 
Регистрация: 19.04.2011
Сообщений: 2

Обратный отсчет времени
Здравствуйте! Передо мной стоит задача написать скрипт по отсчету времени до заданной даты (дата задается пользователем в полях ввода) и вывести полученное значение тоже в полях ввода с обновлением счетчика через 1 секунду. Вот скрипт:

<html>  
<head><title></title>  
<script language="JavaScript">  
function final_countdown() {
	var day_in=document.f1.day_in.value;
	var month_in=document.f1.month_in.selectedIndex;
	var year_in=document.f1.year_in.value;
	var hour_in=document.f1.hour_in.value;
	var minute_in=document.f1.minute_in.value;
	var second_in=document.f1.second_in.value;
	var date_in=new Date(year_in,month_in,day_in,hour_in,minute_in,second_in);

	//проверка на ввод полной даты
	if((year_in=="")||(day_in=="")||(hour_in=="")||(minute_in=="")||(second_in=="")) {
		alert("Вы ввели неполную дату!");
		document.f1.reset();
		document.f1.day_in.focus();
		return "";
	}

	//далее проверка продолжается
	
	var now=new Date();
	
	var days=Math.floor((date_in-now)/(24*60*60*1000));
	var hours=Math.floor(((date_in-now)%(24*60*60*1000))/(60*60*1000));
	var minutes=Math.floor((((date_in-now)%(24*60*60*1000))%(60*60*1000))/(60*1000));
	var seconds=Math.floor(((((date_in-now)%(24*60*60*1000))%(60*60*1000))%(60*1000))/1000);
	var m=new Array(days,hours,minutes,seconds);
	document.f1.day_out.value=m[0];
	document.f1.hour_out.value=m[1];
	document.f1.minute_out.value=m[2];
	document.f1.second_out.value=m[3];
	setTimeout("final_countdown()",1000);
	return m;
}

function resetNum() {
	document.f1.day_in.value="";
	document.f1.month_in.selectedIndex=0;
	document.f1.year_in.value="";
	document.f1.hour_in.value="";
	document.f1.minute_in.value="";
	document.f1.second_in.value="";
	document.f1.day_out.value="";
	document.f1.hour_out.value="";
	document.f1.minute_out.value="";
	document.f1.second_out.value="";
	document.f1.day_in.focus();
}

function init() {
	document.f1.day_in.focus();
	document.f1.start.onclick=final_countdown;
	document.f1.reset_btn.onclick=resetNum;	
	document.f1.day_in.onfocus=resetNum;
}

window.onload=init;
</script>
</head>
<body>
<form name="f1">
        <p><b>Задайте требуемый момент времени:</b></p>
        <table>
        	<tr>
            	<td class="content_td">ДЕНЬ<br><input class="input_form" type="text" name="day_in" maxlength="2"><br></td>
                <td class="content_td">
                	МЕСЯЦ<br>
                    <select class="input_form" name="month_in">
                      <option value="0">Январь
                      <option value="1">Февраль
                      <option value="2">Март
                      <option value="3">Апрель
                      <option value="4">Май
                      <option value="5">Июнь
                      <option value="6">Июль
                      <option value="7">Август
                      <option value="8">Сентябрь
                      <option value="9">Октябрь
                      <option value="10">Ноябрь
                      <option value="11">Декабрь
                    </select>
				</td>
                <td class="content_td">ГОД<br><input class="input_form" type="text" name="year_in" maxlength="4"></td>
                <td class="content_td">ЧАС<br><input class="input_form" type="text" name="hour_in" maxlength="2"></td>
                <td class="content_td">МИНУТА<br><input class="input_form" type="text" name="minute_in" maxlength="2"></td>
                <td class="content_td">СЕКУНДА<br><input class="input_form" type="text" name="second_in" maxlength="2"></td>
             </tr>
        </table>
                
        <p><input id="button" type="button" value="Запустить счетчик" name="start"></p>
        
        <p><b>До заданного момента времени осталось:</b></p>
        
        <table>
        	<tr>
            	<td class="content_td">СУТОК<br><input class="input_form" type="text" name="day_out"></td>
                <td class="content_td">ЧАСОВ<br><input class="input_form" type="text" name="hour_out"></td>
                <td class="content_td">МИНУТ<br><input class="input_form" type="text" name="minute_out"></td>
                <td class="content_td">СЕКУНД<br><input class="input_form" type="text" name="second_out"></td>
        	</tr>
        </table>
        	        
        <p><input id="button" type="button" value="Сброс значeний" name="reset_btn"></p>

    </form>


Проблема в том, что при нажатии кнопки "Сброс значений" (или установке курсора в поле date_in) выдается сообщение "Вы ввели неполную дату!". Т. е. скрипт заново начинает выполняться, а не просто выполняет сброс значений. Подскажите, пожалуйста, где у меня ошибка.
Ответить с цитированием
  #2 (permalink)  
Старый 19.04.2011, 17:33
Интересующийся
Отправить личное сообщение для Cariño Посмотреть профиль Найти все сообщения от Cariño
 
Регистрация: 19.04.2011
Сообщений: 9

Нужно отменить выполнение функции, заданной setTimeout. Для этого в функции final_countdown заменяем код setTimeout("final_countdown()",1000);
на код timer = setTimeout("final_countdown()",1000);
а в функции resetNum() вставляем строку
clearTimeout(timer);
Ответить с цитированием
  #3 (permalink)  
Старый 19.04.2011, 23:30
Новичок на форуме
Отправить личное сообщение для tenorica Посмотреть профиль Найти все сообщения от tenorica
 
Регистрация: 19.04.2011
Сообщений: 2

Cariño,
спасибо вам большое, у меня все получилось!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен счетчик времени vai Общие вопросы Javascript 1 13.03.2011 20:40
Тест на JS, отсчет времени... Галька Элементы интерфейса 4 27.01.2011 22:23
Обратный отсчет. BK201 Элементы интерфейса 6 02.08.2010 15:42
Многократный обратный отсчет sultan.khayrulin Общие вопросы Javascript 1 30.05.2010 22:41
Скрипт ввода времени Zzet Общие вопросы Javascript 3 10.02.2010 21:30