Помогите найти ошибку в коде
Изучаю javascript и решил написать простенький таймер для проверки своих-знаний. Но в каком-то месте допустил ошибку. Пожалуйста помогите мне ее найти :help: :help: :help:
Вот код: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>javascript</title> <script type="text/javascript"> var izm; var timeg; var t; function timer(form){ var ans = form.ans.value; var time = form.time.value; timeg = time; var fail = true; if (ans == "sec") t = time * 1000; else if (ans == "min") t = time * 60000; else if (ans == "hou") t = time * 3600000; else{ alert("вы не указали единицы измерения"); fail = false;} if (fail != false){ setTimeout( outtimer , t ); setTimeout( calk , 0); } function calk (){ if (timeg >= 3600) { var r = Math.floor( timeg / 3600 ); var e = Math.floor( timeg / 60 % 60); var z = (timeg - r * 3600 - e * 60); if (e == 0 && z == 0){ document.getElementById('actt').innerHTML = ("осталось " + r + " часов"); }else if (e == 0){ document.getElementById('actt').innerHTML = ("осталось " + r + " часов" + " и " + z + " секунд"); }else if (z == 0){ document.getElementById('actt').innerHTML = ("осталось " + r + " минут" + " и " + e + " минут"); } } else if (timeg >= 60 && time < 3600){ var e = Math.floor( timeg / 60); var z = (timeg - e * 60); if (z != 0){ document.getElementById('actt').innerHTML = ("осталось " + e + " минут" + " и " + z + " секунд"); }else{ document.getElementById('actt').innerHTML = ("осталось " + e + " минут"); } } else if (timeg < 60 %% timeg >= 0){ document.getElementById('actt').innerHTML = ("осталось " + timeg + " секунд"); } timeg --; if (timeg < 0){ document.getElementById('actt').innerHTML = ("Таймер закончил свое действие"); } setTimeout( calk , 1000 ); } function outtimer () { alert("время закончилось"); } </script> </head> <body> <form action="" id = "form"> <hr> <label for="time">Время</label> <input type="text" placeholder="Введите время для таймера" name = "time" id = "time"> <br> <hr> <p>В каких еденицах измерения вы написали время?</p> <label for="sec">Секунды</label> <input type="radio" name="ans" id="sec" value="sec"> <label for="min">Минуты</label> <input type="radio" name="ans" id="min" value="min"> <label for="hou">Часы</label> <input type="radio" name="ans" id="hou" value="hou"> <br> <hr> <input type="button" onclick="timer(getElementById('form'))" value="Активировать таймер"> <hr> <span id = "actt">Вы не активировали таймер</span> <hr> </form> </body> </html> |
Пожалуйста, отформатируйте свой код!
Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [js] ... ваш код... [/js] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
Вы бы хоть научились инструментами отладки пользоваться в браузере своём, он же там всё понятно расписывает, что и где не так. И это одно из первых тем, которые нужно изучить при написании кода, потрачено будет минут 20-30, а пользы на всю жизнь.
Откройте консоль, посмотрите ошибку и исправьте |
Например
44 } else if (timeg < 60 %% timeg >= 0){ %% вместо && |
Y_a__r_i__k,
ещё строки 22 нет, и строки 5, 6 в ie работать не будут. |
<!DOCTYPE html> <html lang='en'> <head> <meta charset='UTF-8'> <title>javascript</title> <script type='text/javascript'> Number.prototype.finish = function(fmt) { var n = this; fmt = fmt.split(/[-:]/); switch(fmt[0]) { case "ru": n += 79; n %= 100; n = n > 83 || n % 10 > 3 ? 2 : n % 10 ? 4 : 3; return "" + this + fmt[1] + fmt[n]; } return "" + this; } var izm; var timeg; var t; function timer(form) { var ans = form.ans.value; var time = form.time.value; timeg = time; var fail = true; if(ans == "sec") t = time * 1000; else if(ans == "min") t = time * 60000; else if(ans == "hou") t = time * 3600000; else { alert("вы не указали единицы измерения"); fail = false; } if(fail != false) { setTimeout(outtimer, t); setTimeout(calk, 0); timeg = t / 1000; } } function calk() { if(timeg >= 0) { var r = Math.floor(timeg / 3600); var e = Math.floor(timeg / 60 % 60); var z = (timeg - r * 3600 - e * 60); var s = []; if(r > 0) s.push(r.finish("ru: час-ов--а")); if(e > 0) s.push(e.finish("ru: минут--а-ы")); if(z > 0) s.push(z.finish("ru: секунд--а-ы")); document.getElementById("actt").innerHTML = "осталось " + s.join(" и "); } timeg --; if(timeg < 0) document.getElementById("actt").innerHTML = ("Таймер закончил свое действие"); setTimeout(calk, 1000); } function outtimer() { alert("время закончилось"); } </script> </head> <body> <form action='' id=form> <hr> <label for=time>Время</label> <input type=text placeholder='Введите время для таймера' name=time id=time /> <br> <hr> <p>В каких еденицах измерения вы написали время?</p> <label for=sec>Секунды</label> <input type=radio name=ans id=sec value='sec' /> <label for=min>Минуты</label> <input type=radio name=ans id=min value='min' /> <label for=hou>Часы</label> <input type=radio name=ans id=hou value='hou' /> <br> <hr> <input type=button onclick='timer(getElementById("form"))' value='Активировать таймер' /> <hr> <span id=actt>Вы не активировали таймер</span> <hr> </form> </body> </html> |
При запуске таймера несколько раз интервалы накладываются. Надо очищать.
<input value='5' id='t'> <input type='button' value='Go' onclick='clearInterval(window.k);r.innerHTML=t.value;k=setInterval(()=>!--r.innerHTML&&(clearInterval(k)||alert("Done!")),1e3)'> <div id='r'></div> |
Часовой пояс GMT +3, время: 14:02. |