Обратный отсчет времени
Здравствуйте! Передо мной стоит задача написать скрипт по отсчету времени до заданной даты (дата задается пользователем в полях ввода) и вывести полученное значение тоже в полях ввода с обновлением счетчика через 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) выдается сообщение "Вы ввели неполную дату!". Т. е. скрипт заново начинает выполняться, а не просто выполняет сброс значений. Подскажите, пожалуйста, где у меня ошибка. |
Нужно отменить выполнение функции, заданной setTimeout. Для этого в функции final_countdown заменяем код setTimeout("final_countdown()",1000);
на код timer = setTimeout("final_countdown()",1000); а в функции resetNum() вставляем строку clearTimeout(timer); |
Cariño,
спасибо вам большое, у меня все получилось! |
Часовой пояс GMT +3, время: 23:27. |