Javascript.RU

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

Помогите найти ошибку в коде
Изучаю javascript и решил написать простенький таймер для проверки своих-знаний. Но в каком-то месте допустил ошибку. Пожалуйста помогите мне ее найти
Вот код:
<!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>

Последний раз редактировалось Y_a__r_i__k, 01.03.2017 в 20:29.
Ответить с цитированием
  #2 (permalink)  
Старый 01.03.2017, 20:24
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #3 (permalink)  
Старый 01.03.2017, 21:21
Новичок на форуме
Отправить личное сообщение для Eschaton Посмотреть профиль Найти все сообщения от Eschaton
 
Регистрация: 07.03.2016
Сообщений: 5

Вы бы хоть научились инструментами отладки пользоваться в браузере своём, он же там всё понятно расписывает, что и где не так. И это одно из первых тем, которые нужно изучить при написании кода, потрачено будет минут 20-30, а пользы на всю жизнь.
Откройте консоль, посмотрите ошибку и исправьте
Ответить с цитированием
  #4 (permalink)  
Старый 02.03.2017, 00:51
Кандидат Javascript-наук
Отправить личное сообщение для Diphenyl Oxalate Посмотреть профиль Найти все сообщения от Diphenyl Oxalate
 
Регистрация: 21.01.2017
Сообщений: 139

Например

44       }   else if (timeg < 60 %% timeg >= 0){


%% вместо &&
Ответить с цитированием
  #5 (permalink)  
Старый 02.03.2017, 00:58
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Y_a__r_i__k,
ещё строки 22 нет, и строки 5, 6 в ie работать не будут.
Ответить с цитированием
  #6 (permalink)  
Старый 02.03.2017, 07:47
Аватар для Paguo-86PK
Профессор
Отправить личное сообщение для Paguo-86PK Посмотреть профиль Найти все сообщения от Paguo-86PK
 
Регистрация: 16.09.2009
Сообщений: 253

<!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>
Ответить с цитированием
  #7 (permalink)  
Старый 02.03.2017, 13:00
Кандидат Javascript-наук
Отправить личное сообщение для Diphenyl Oxalate Посмотреть профиль Найти все сообщения от Diphenyl Oxalate
 
Регистрация: 21.01.2017
Сообщений: 139

При запуске таймера несколько раз интервалы накладываются. Надо очищать.

<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>

Последний раз редактировалось Diphenyl Oxalate, 02.03.2017 в 13:14.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает чат. Помогите найти ошибку. SuperGangster AJAX и COMET 0 29.07.2015 16:22
Помогите найти ошибку в скрипте alex2396242 Ваши сайты и скрипты 2 17.06.2013 00:51
Помогите найти ошибку... AJAX проверка существования e-mail в БД Murmurianez AJAX и COMET 1 03.08.2011 18:49
Помогите найти параметр в скрипте! laised Элементы интерфейса 0 01.02.2011 02:03
Помогите найти ошибку в скрипте sdff AJAX и COMET 4 21.07.2008 19:33