Javascript 为什么我的函数是自己运行的,而不是点击按钮?
我有一个倒计时2小时的计时器。我希望计时器仅在按下按钮item1时运行。但是,现在,当页面打开时,计时器会立即运行。我认为这与时间间隔有关,但我不确定该改变什么 如何更改此选项,使其仅在单击按钮时运行?(第二次单击按钮时计时器停止) 代码如下:Javascript 为什么我的函数是自己运行的,而不是点击按钮?,javascript,timer,Javascript,Timer,我有一个倒计时2小时的计时器。我希望计时器仅在按下按钮item1时运行。但是,现在,当页面打开时,计时器会立即运行。我认为这与时间间隔有关,但我不确定该改变什么 如何更改此选项,使其仅在单击按钮时运行?(第二次单击按钮时计时器停止) 代码如下: var itemClick = document.getElementById('item1'); itemClick.addEventListener('click', function(){ itemHandler(); }) var c
var itemClick = document.getElementById('item1');
itemClick.addEventListener('click', function(){
itemHandler();
})
var count = 7200;
var counter = setInterval(itemHandler, 1000); //1000 will run it every 1 second
function itemHandler() {
count = count - 1;
if (count == -1) {
clearInterval(counter);
return;
}
var seconds = count % 60;
var minutes = Math.floor(count / 60);
var hours = Math.floor(minutes / 60);
minutes %= 60;
hours %= 60;
document.getElementById("item1-label").innerHTML = hours + " hour(s) " + minutes + " minutes and " + seconds + " seconds remaining.";
}
仅在单击按钮的基础上启动和停止间隔
只需单击按钮即可启动和停止间隔。您的函数没有自动调用。它仅由事件处理程序和
setInterval
计时器调用
听起来好像你不打算立即启动间隔计时器。如果是这种情况,请将启动间隔计时器的代码移动到事件处理程序中:
var itemClick = document.getElementById('item1');
var counter = 0;
itemClick.addEventListener('click', function(){
itemHandler(); // Include this if you want it to run right away, since the
// first timer callback will take a second
counter = setInterval(itemHandler, 1000); //1000 will run it every 1 second
});
您可能还希望在计时器运行时禁用按钮或其他功能,或者允许通过单击另一个按钮取消
禁用按钮:
var itemClick = document.getElementById('item1');
var counter = 0;
itemClick.addEventListener('click', function(){
itemClick.disabled = true;
counter = setInterval(itemHandler, 1000); //1000 will run it every 1 second
});
在itemHandler
中:
if (count == -1) {
clearInterval(counter);
itemClick.diabled = false; // *** Added
return;
}
您的函数没有调用自身。它仅由事件处理程序和
setInterval
计时器调用
听起来好像你不打算立即启动间隔计时器。如果是这种情况,请将启动间隔计时器的代码移动到事件处理程序中:
var itemClick = document.getElementById('item1');
var counter = 0;
itemClick.addEventListener('click', function(){
itemHandler(); // Include this if you want it to run right away, since the
// first timer callback will take a second
counter = setInterval(itemHandler, 1000); //1000 will run it every 1 second
});
您可能还希望在计时器运行时禁用按钮或其他功能,或者允许通过单击另一个按钮取消
禁用按钮:
var itemClick = document.getElementById('item1');
var counter = 0;
itemClick.addEventListener('click', function(){
itemClick.disabled = true;
counter = setInterval(itemHandler, 1000); //1000 will run it every 1 second
});
在itemHandler
中:
if (count == -1) {
clearInterval(counter);
itemClick.diabled = false; // *** Added
return;
}
听起来您不需要间隔。您的函数没有调用自身。它仅由事件处理程序和
setInterval
计时器调用。@Azoel-不,这在上面没有发生。@T.J.Crowder我的错,你是对的,听起来你不想要间隔。你的函数没有调用自己。它仅由事件处理程序和setInterval
计时器调用。@Azoel-不,这不会发生在上面。@T.J.Crowder我的错,你是对的,有一个“计数器未定义”错误。当我为它创建一个变量时,什么都没有发生。出现“计数器未定义”错误。当我为它创建一个变量时,什么都没有发生。这起作用了,但是,是的,我需要禁用按钮;如果我一直按这个按钮,计时器的速度会提高1秒。谢谢。这很有效,但是,是的,我需要禁用按钮;如果我一直按这个按钮,计时器的速度会提高1秒。非常感谢。