使用onClick调用Javascript函数

时间:2013-10-10 20:09:22

标签: javascript

任何人都可以告诉我为什么这个计时器:

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 =&#34; timer()&#34;加载。我觉得我错过了一些非常明显但我无法看到它的东西

2 个答案:

答案 0 :(得分:3)

它正在发挥作用。

更改jsfiddle如何将您的脚本从onLoad包含到No wrap - in <head>

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

基本上timer()不在全球范围内(请查看jsfiddle iframe源代码)

答案 1 :(得分:1)

那是因为你在load事件中定义了这个函数,所以它只能在那个范围内使用。

将设置更改为No wrap - in <head>以定义全局范围内的功能。

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