我已获得以下代码:
$("#avvia_cronometro").click(function() {
var tempo = setInterval(function() {
cronometro();
$("#tempo_cronometro").html((h)+":"+(min)+":"+(sec));
}, 1000);
});
$("#stop_cronometro").click(function() {
clearInterval(tempo);
});
function cronometro() {
if (sec == 59) {
min +=1;
if (min == 59) {
h+=1;
min=0;
}
sec=0;
}
sec+=1;
}
当我点击#stop_cronometro
时,它无法正常工作,并说:
Uncaught ReferenceError: tempo is not defined
我该如何解决?
如果我点击#avvia_cronometro
,它会以时间开始,以便它可以正常工作。
答案 0 :(得分:1)
好吧,它发生的原因是变量范围在单独的函数内部,当一个变量在函数内部声明时,它只能访问它自己和子函数。
在你的情况下,我建议你制作"节奏"变量全局:
var tempo = null;
$("#avvia_cronometro").click(function() {
tempo = setInterval(function() {
cronometro();
$("#tempo_cronometro").html((h)+":"+(min)+":"+(sec));
}, 1000);
});
$("#stop_cronometro").click(function() {
clearInterval(tempo);
});
function cronometro() {
if (sec == 59) {
min +=1;
if (min == 59) {
h+=1;
min=0;
}
sec=0;
}
sec+=1;
}
答案 1 :(得分:1)
因为全局范围(或停止点击处理程序可以达到的任何范围)中不存在变量.POSITION,
.links, .links a i::after {position: absolute;}
.links a i {position: relative;}
.CO-ORDINATES,
.links {top: 40%; left: 50%;}
.links a i {z-index: 100;}
.links a i::after {top: -7px; left: -7px; z-index: -1;}
.WIDTH_HEIGHT,
.links {width: 9em; height: 4em;}
.links a i::after {width: 30px; height: 30px;}
.MARGIN_PADDING,
.links {margin: -20px 0 0 -45px;}
.links a i {margin: 0 13px;}
.TEXT-COLOR,
.links a i {color: #68c3a3;}
.links a i:hover i {color: #fff;}
.TEXT-PRESENTATION,
.links a i {font-size: 16px;}
.BACKGROUND,
.links a:hover i:hover {background-color: #68c3a3;}
.BORDER,
.links a i::after {border: 1px solid #68c3a3; border-radius: 3px;}
.MISCELLANEOUS,
.links {opacity: 0;}
.PSEUDO-ELEMENTS,
.links a i::after {content: '';}
.TRANSFORM,
.links {
-webkit-transform: translate(0, -50px);
-moz-transform: translate(0, -50px);
-ms-transform: translate(0, -50px);
-o-transform: translate(0, -50px);
transform: translate(0, -50px);
}
.links a i::after {
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
-o-transform: rotate(45deg);
transform: rotate(45deg);
}
。
当在函数内声明一个带有tempo
的变量时,该函数返回时变量被删除:
var
如果您需要全局变量,请在没有function foo () {
var bar = 1;
}
foo();
console.log(bar); // uncaught reference error - "bar" doesn't exist
:
var
但是,我一般不会推荐这个,因为它对未来的维护者来说似乎是个错误。相反,在全局范围内明确声明全局变量以清楚地表明您的意图:
function foo () {
bar = 1;
}
foo();
console.log(bar); // prints 1
答案 2 :(得分:0)
因为您在开始执行之前清除间隔。在if中处理未定义的节奏。 SetInterval是一个异步调用。