在onclick事件发生后,我无法让javascript函数重置自己。当我点击“开始”按钮时,计数器开始计数。但是当我点击“重置”按钮时没有任何反应。我需要将计时器重置为“0:00”并等待我再次点击“开始”。这是我的代码:
<script type="text/javascript">
var seconds = 0;
var minutes = 0;
function zeroPad(time) {
var numZeropad = time + '';
while(numZeropad.length < 2) {
numZeropad = "0" + numZeropad;
}
return numZeropad;
}
function countSecs() {
seconds++;
if (seconds > 59) {
minutes++;
seconds = 0;
}
document.getElementById("timeBox").innerHTML = "Time " + zeroPad(minutes) + ":" + zeroPad(seconds);
}
function startTimer() {
action = window.setInterval(countSecs,1000);
}
function resetTimer() {
var seconds = 0;
var minutes = 0;
}
</script>
<body>
<button onclick = "startTimer()">Start</button>
<div id="timeBox">Time 00:00</div>
<button onclick = "resetTimer">Reset</button>
</body>
答案 0 :(得分:1)
调用clearInterval()方法。
function resetTimer() {
window.clearInterval(action);
}
答案 1 :(得分:1)
这是一个范围问题,在函数内部使用var,使秒和分钟对该函数本地化。删除前导var将使您从正确的方向开始。
function resetTimer() {
seconds = 0;
minutes = 0;
}
答案 2 :(得分:1)
您的代码中有两个错误:
首先,在按钮中,您错过了函数名称后的()
以进行实际通话:
<button onclick = "resetTimer()">Reset</button>
其次,你没有使用window.clearInterval()
(MDN docu)停止间隔,所以计时器一直在继续。
// just to make it an explicit global variable. already was an implicit one.
var action;
// rest of your code
function resetTimer() {
// clear the timer
window.clearInterval( action );
// reset variables
var seconds = 0;
var minutes = 0;
// update output
document.getElementById("timeBox").innerHTML = "Time " + zeroPad(minutes) + ":" + zeroPad(seconds);
}
我设置了一个工作小提琴here。
答案 3 :(得分:0)
Onclick事件必须调用类似:onclick="resetTimer();"
的函数,并在末尾添加括号。如果您未定义type="button"
,某些浏览器可能会尝试按下按钮。我没想到你想要重置计时器来停止计时器,所以我添加了一个停止按钮。
http://jsfiddle.net/iambriansreed/WRdSK/
<button type="button" onclick="startTimer();">Start</button>
<div id="timeBox">Time 00:00</div>
<button type="button" onclick="resetTimer();">Reset</button>
<button type="button" onclick="stopTimer();">Stop</button>
<script>
window.seconds = 0;
window.minutes = 0;
function startTimer() {
window.action = setInterval(countSecs,1000);
}
function resetTimer() {
seconds = 0;
minutes = 0;
}
function stopTimer() {
clearInterval(action);
seconds = -1;
minutes = 0;
countSecs();
}
function zeroPad(time) {
var numZeropad = time + '';
while(numZeropad.length < 2) {
numZeropad = "0" + numZeropad;
}
return numZeropad;
}
function countSecs() {
seconds++;
if (seconds > 59) {
minutes++;
seconds = 0;
}
document.getElementById("timeBox").innerHTML = "Time " + zeroPad(minutes) + ":" + zeroPad(seconds);
}
</script>