2014-07-25 235 views
0

我有一個計時器腳本,我想用戶能夠設置時間量。它在加載腳本時起作用,當頁面加載並將計時器設置爲默認值時,但是當我創建一個輸入變量和一個按鈕來調用該函數時它不起作用。 「外部」功能的作品,但我從工作版本複製和粘貼到該功能的代碼並沒有。看起來內部定時器函數從未被調用,即使'var countdownTimer = setInterval('secondPassed()',1000);'是外部函數的結尾。我一直在努力修復它幾個小時,我想要一個更有經驗的眼睛來檢查它。繼承人代碼:功能裏面的功能不工作

<script type="text/javascript"> 
function startTimer() { 
    var seconds = parseInt(document.getElementById("time").value); 
    document.getElementById('countdown').innerHTML = seconds; 
    function secondPassed() { 
     document.write(Date()); 
     var minutes = Math.round((seconds - 30)/60); 
     var remainingSeconds = seconds % 60; 
     if (remainingSeconds < 10) { 
      remainingSeconds = "0" + remainingSeconds; 
     } 
     document.getElementById('countdown').innerHTML = minutes + ":" + remainingSeconds; 
     if (seconds == 0) { 
      clearInterval(countdownTimer); 
      document.getElementById('countdown').innerHTML = "Buzz Buzz"; 
     } else {  
      seconds--; 
     } 
    } 
    var countdownTimer = setInterval('secondPassed()', 1000); 
} 
</script> 
    <input id="time" type="number"> 
    <input type="button" value="Set Timer" onClick="startTimer()"> 
    <span id="countdown" class="timer">Timer: </span> 
</body> 

「定時器:」文本被替換爲秒變量的值,但僅僅是因爲內部函數被定義之前的行。日期()是不是印在instide功能

回答

0

你傳遞一個字符串setTimeout,所以它得到eval uated和範圍被打破了。只傳遞函數到setTimeout

var countdownTimer = setInterval(secondPassed, 1000); 
+0

工作!只是好奇爲什麼我用在頁面加載默認值的定時器設置的字符串方式工作,但它沒有在一個函數內工作? –

+0

假設在你沒有共享的工作示例中,'secondPassed'是一個全局的,所以它在字符串評估的範圍內。 – Quentin

+0

如果按照全局來說,你的意思是不在另一個函數內而不是yes。謝謝你的幫助! –