2012-01-26 7 views
0

내 간단한 루프가 작동하지 않는데 문제가 setTimeout에서 발생하는 것 같습니다. 카운트 다운으로 작은 게임을 코딩하려고합니다.Jquery setTimeout loop while

while (there is time) { 
    // actions possible to do 

    //my timer function 
} 

그래서 C는 시간

var c = 30; 

while (c > 0) 
{ 
c -= 1;  
setTimeout($("#timer").html(c) , 1000); 
}; 

경우 그냥 카운트 다운이 아니라, 사용자는 카운트 다운하는 동안 작업을 할 수 있어야합니다. 도움 주셔서 감사합니다.

+1

'c '는 반복 될 때마다 덮어 쓰여지고, $ ("# timer") .html (c)'는 즉시 호출됩니다. 함수 래퍼는 어디에 있습니까? –

+1

이러한 코드 작성의 목적은 언급되지 않았습니다. 질문 자체는 매우 불분명하다. – Tamil

답변

0

나는 당신이 그 루프 c 변수로 무엇을하고 있는지 이해할 수 없다,하지만 당신은 setTimeout 기능

setTimeout(1000, function(){$("#timer").html(c)}; 

또는 권장되지 방식으로 오용 :

setTimeout('$("#timer").html(c)', '1000'; 

docs

5

에게 setTimeout은 첫 번째 매개 변수로 함수를 기대합니다. 이 함수는 시간이 없을 때 호출됩니다.

setTimeout(function() { 
    // blah blah 
}, 1000); 

난 당신이 여기에 카운트 다운과 같은 뭔가를 트링하고 있습니다 추측 예 :하지만 당신이 당신의 예제 코드에서 제공하는

setTimeout을 사용하는 올바른 방법이 있어야한다 $("#timer").html(c)를 호출 한 결과입니다 코드 :를 사용 http://jsfiddle.net/cazSn/2/

PS에서

function countdown(count, container) {  // declare the countdown function. 
    var $container = $(container); 
    (function step() { 
    $container.html(count);    // set the timer html 
    if (count-- > 0) {      // decrement counter and stop when counter reaches 0 
     setTimeout(step, 1000);    // if counter is not 0, then issue the next timeout 
    } 
    })();          // call step immediately 
} 
countdown(10, '#timer'); 

라이브 데모입니다 카운트 다운을 실제로 구현하려는 경우 10 개가 더 쉬울 것입니다.

+0

접두사'c = 10;'을 var, * 또는 *로 사용하여 함수 매개 변수로 이동 :'(function countdown (c) {...}) (10);'. –

+0

@RobW 지적 해 주셔서 감사합니다. 내 코드를 업데이트했습니다. – qiao

+0

이제 코드를 변경 했으므로 jQuery 선택기도 캐시하는 것이 좋습니다. –

2

setInterval이 좋습니다.

var c = 100; 
var intervalID = setInterval(function(){ 
    if (c>0){ 
     $("#timer").html(c); 
     c--; 
    } else { 
     clearInterval(intervalID); 
    } 
}, 1000);