0

谁能告诉我为什么这个计时器:

function timer() {
 var counter = 0,
 cDisplay = document.getElementById("counter");
 format = function(t) {
     var hours = Math.floor(t/360000),
         minutes = Math.floor( (t/6000) % 60),
         seconds = Math.floor( (t/100) % 60),
         ms = (Math.floor(t % 100)/100).toFixed(2);
     if (t<6000) { 
         cDisplay.innerHTML = seconds + ms.substring(1); 
     } else if (t<360000) {
         seconds = (seconds < 10) ? "0" + seconds.toString() : seconds.toString();
         cDisplay.innerHTML = minutes + ":" + seconds + ms.substring(1);
     } else {
         minutes = (minutes < 10) ? "0" + minutes.toString() : minutes.toString();
         seconds = (seconds < 10) ? "0" + seconds.toString() : seconds.toString();
         cDisplay.innerHTML = hours + ":" + minutes + ":" + seconds + ms.substring(1); 
     }
 };
 setInterval(function() {
    counter++;
    format(counter);
 },10);
}

当我单击此标签时不会启动:

<label onClick="timer()" id="counter">Start Timer</label>

我可以通过在整个函数周围加上括号并在末尾打一个分号来使其自动加载,如下所示:

http://jsfiddle.net/UHjas/

但我不知道为什么它不会加载 onClick="timer()"。我觉得我错过了一些非常明显的东西,但我就是看不到它

4

2 回答 2

3

这是工作。

将 jsfiddle 包含脚本的方式从更改onLoadNo wrap - in <head>

演示:http: //jsfiddle.net/UHjas/3/

基本上timer()不在全局范围内(检查 jsfiddle iframe 源)

于 2013-10-10T20:13:27.890 回答
1

那是因为您在load事件中定义了函数,所以它只在该范围内可用。

将设置更改为No wrap - in <head>以在全局范围内定义函数。

http://jsfiddle.net/UHjas/1/

于 2013-10-10T20:15:11.603 回答