2013-07-24 8 views
0

код:Javascript проблема setInterval таймер

function startTimer() { 
    var i = 0; 
    var TimeInterval = setInterval(function() { 
    $("#Time").html(i++); 
    }, 1000); 
    setTimeout(function() { 
    clearInterval(TimeInterval); 
    }, 2000); 
} 

моя проблема заключается в том, что $("#Time").html(i++) всегда 0 и не увеличивающиеся

+0

Я думаю, что проблема в том, что вы останавливаете интервал прежде, чем он шанс запустить 2-й раз (1-й раз * будет * показывать 0, но приращение i в следующий раз) – Archer

+0

что вы предлагаете? – Sora

+0

Что вы на самом деле пытаетесь сделать, потому что все это можно сделать, избавившись от обоих таймеров и просто поместив '$ (« # Time »). Html (« 1 »)' - очевидно, я знаю, что это не то, что вы хотеть. – Archer

ответ

1
<!DOCTYPE html> 
<html> 
<head> 
<script type = 'text/javascript' src='//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js'></script> 
<script> 
(function startTimer() {//selef executing function 
var i = 0; 
var TimeInterval = setInterval(function() { 
    $("#button").html(i++); 
    }, 1000); 
    })()//end of function 
</script> 
</head> 
<body> 
<p id='button'></p> 
</body> 
</html> 

набор тайм-аут должен быть удален из вашего кода, то это будет work.see выше code.it работает

0
function startTimer() { 
    var i = 0; 
    var TimeInterval = setInterval(function() { 
    $("#Time").html(++i); 
    }, 1000); // This will run every 1000ms == 1s 
    setTimeout(function() { 
    clearInterval(TimeInterval); 
    }, 2000); // This is 2000 ms == 2s. 120000ms is 2min 
} 

Я только изменил i++ к ++i - но разница, вероятно, что вы хотите.

С i++, i сначала вычисляется, а затем увеличивается - с ++i, i сначала увеличивается, а затем вычисляется.

0
function startTimer() { 
    var i = 0; 
    var TimeInterval = setInterval(function() { 
    $("#Time").html(i++); 
    }, 1000); 
    setTimeout(function() { 
    clearInterval(TimeInterval); 
    }, 120000); 
} 

увеличивает этот код HTML, каждый второй, до 2 минуты прошло :)

0

Я думаю, что это самый простой с помощью только один тайм-аут, который перепланирования себя:

function countForTwoMins() { 
    var count = 1, 
     timer = function() { 
      $("#Time").html(count++); 
     }; 
    window.setTimeout(function() { 
     timer(); 
     if (count < 120) { 
      window.setTimeout(arguments.callee, 1000); 
     } 
    }, 1000); 
} 

countForTwoMins(); 

http://jsfiddle.net/ybyu5/

Конечно, если вас беспокоит аргумент.callee, устаревший:

function countForTwoMins() { 
    var count = 1, 

    function callback() { 
     $("#Time").html(count++); 
     if (count < 120) { 
      window.setTimeout(callback, 1000); 
     } 
    }   
    window.setTimeout(callback, 1000); 
} 
Смежные вопросы