2014-01-29 2 views
0

Я сделал простой таймер в javascript, используя цикл for, но после нажатия кнопки вызова функции test() вся страница зависает, поэтому я предполагаю, что у меня есть бесконечный цикл где-то Это мой код:javascript для цикла, идущего в бесконечном цикле

<html> 
<head> 
<script> 
    function test() { 
    var HowLong = 5; 
    for (var i=0;i<HowLong;i--) { 
     document.write(HowLong[i] + "<br>"); 
    } 
    } 
</script> 
</head> 
<body> 
    <input type="button" onclick="test()" value="Start Timer"> 
</body> 
</html> 
+1

простой логики, в цикле я никогда не буду> HowLong нарушить это условие, так бесконечный цикл. –

+0

Есть пара проблем: а) Да, у вас бесконечный цикл, потому что вы не подсчитываете. б) 'HowLong' - это число, но вы пытаетесь использовать его как объект (' HowLong [i] '). Вероятно, вы хотите использовать только 'i'. c) Даже если вы это исправите, на самом деле вы не увидите изменения каждой итерации. Выполнение цикла настолько мгновенно, что вы увидите только изменение последней итерации. Я рекомендую прочитать руководство по базовым типам данных в JavaScript: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Values,_variables,_and_literals –

+1

@ user3247345: У меня есть странное чувство, что вы совершенно ошибаетесь в логике реализации таймера обратного отсчета. –

ответ

0

Попробуйте это;

for (var i=0;i<HowLong;i++) { 
    document.write(i + "<br>"); 
} 
+2

В чем разница? –

+0

Он больше не отстает, просто печатает «undefined» количество раз, поскольку HowLong равно – user3247345

+0

@ user3247345: поскольку вы пытаетесь получить доступ к свойствам '0',' 1', '2' и т. Д. ** номера ** ('HowLong [я]'). Числа не имеют таких свойств, обычно массивы. –

3

Да у вас есть бесконечная проблема цикла в цикл:

for (var i=0;i<HowLong;i--) 

Вместо i-- попробовать i++

for (var i=0;i<HowLong;i++) 

Еще одна вещь HowLong не является массивом, так что вы не можете используйте HowLong[i], просто используйте:

document.write(i+ "<br>"); 

Как указано в примечаниях document.write() после того, как документ будет загружен, он очистит текущий документ и запустит новый. В вашем случае ваша кнопка Start Timer будет очищена. Если вы хотите этого избежать, вы можете использовать div и добавить к нему значение.

<html> 
    <head> 
    <script> 
    function test() { 
     var HowLong = 5; 
     for(var i=0;i<HowLong;i++) { 
     document.getElementById("myDiv").innerHTML += i + "<br>"; 
     } 
    } 
    </script> 
    </head> 
    <body> 
    <input type="button" onclick="test()" value="Start Timer"> 
    <div id="myDiv"></div> 
    </body> 
</html> 
+1

Есть еще одна проблема. Когда вы используете 'document.write()' после загрузки документа, он очистит текущий документ и запустит новый. – jfriend00

+0

@ jfriend00 Спасибо за примечание, я обновил свой ответ. – Bhushan

0
<html> 
<head> 
<script> 
    var HowLong = 5; 
    var isRun = false; 

    function mf(i){ 
    document.getElementById('myAnchor').innerHTML = i; 
    } 
    function rt(i) 
    { 
     setTimeout(function(){ 
      mf(i++); 
      if(i!=HowLong+1)rt(i); 
      else isRun = false; 
     }, 1000); // 1000ms = 1sec 
    } 
    function test() { 
    var i = 1; 
    if(!isRun) 
    { 
     isRun = true; 
     rt(i); 
    } 
    } 
</script> 
</head> 
<body> 
<div id="myAnchor"></div> 
    <input type="button" onclick="test()" value="Start Timer"> 
</body> 
</html> 

вы забыли добавить задержку в цикле

Смежные вопросы