2013-12-10 5 views
2

나는 일종의 JS 초보자이며 주어진 시간 후에 카운트 다운 타이머를 시작한다. 기본적으로 사용자가 버튼을 클릭하면 시계가 시작되고 첫 번째 타이머가 만료되면 두 번째 시계가 시작됩니다. 나는 "setInterval"이 이것을 달성하는 가장 좋은 방법이라는 것을 이해한다. 내가 직면하고있는 주요 문제는 두 번째 타이머가 화면에 나타나지만 카운트 다운을 시작하지 않는다는 것입니다. setInterval 내에서 setInterval을 실행하려고하기 때문에 이것이 확실하다고 생각하지만 확실하지 않습니다. 또한 리드 타이머는 0 대신 1로 "삑"소리를냅니다. 코드는 다음과 같습니다. 양식 버튼을 누르면 카운트 다운 기능이 시작됩니다.카운트 다운 타이머, setInterval 내의 setInterval?

<script> 

function countdown(form){ 
    lead = form.leadseconds.value; 
    cd = form.cdseconds.value; 
    startLeader = setInterval(leadtimer, 1000); 
} 

function leadtimer(){ 
    if (lead > 0){ 
     document.getElementById("leadtime").innerHTML = lead; 
     lead--; 
    } 
    if (lead == 0){ 
     document.getElementById("leadtime").innerHTML = "beep"; 
     startTimer = setInterval(cdtimer, 1000); 
     clearInterval(startLeader); 
    } 

} 

function cdtimer(){ 
    if (cd > 0){ 
     document.getElementById("cdtime").innerHTML = cd; 
     lead--; 
    } 
    if (cd == 0){ 
     document.getElementById("cdtime").innerHTML = "beepbeep"; 
     clearInterval(startTimer); 
    } 

} 

</script> 

어떤 도움을 주시면 감사하겠습니다. 감사!

+0

왜 if (cd> 0) {lead--; }'? – leaf

+0

글로벌 vars를 어딘가에 선언 했나요? ('lead','cd','startLeader','startTimer')? – leaf

+0

당신은 그것을 얻었다! cdtimer 함수에서 잘못된 변수를 줄였습니다. 감사!!! – Codey

답변

1

첫 번째 문제 : lead1에 도달 할 때 때문에 (lead > 0가) 평소와 같이 발생하는 경우 당신은 첫째, 초기에 "삐"1 초 얻고, 그리고 lead이 감소된다. lead은 이제 0과 같습니다. 그런 다음 두 번째 if에 따라 실행이 이동합니다. lead을 0으로 줄 였으므로 본문도 실행됩니다. "else if"를 원하므로 두 블록 중 하나만 실행됩니다. 그래서 같이 : lead--; : cdtimer()에서 두 번째로

if (lead > 0) { 
    // Do stuff. 
    lead--; 
} else if (lead == 0) { 
    // Do other stuff. 
} 

, 당신은 lead을 감소시키는 것입니다. 나는 그것이 첫 번째 타이머 함수를 복사하고 이름을 변경했을 때 들뜬 실수라고 생각합니다. 적어도, 그게 내가 항상 그런 식으로 끝내는 방법입니다.

물론 else ifcdtimer()에도 사용하고 싶습니다.

+1

그건 의미가 있습니다. 그것은 효과가있다! 감사!!! – Codey