2014-07-25 170 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。谢谢你的帮助! –