Javascript 为什么我的函数是自己运行的,而不是点击按钮?

Javascript 为什么我的函数是自己运行的,而不是点击按钮?,javascript,timer,Javascript,Timer,我有一个倒计时2小时的计时器。我希望计时器仅在按下按钮item1时运行。但是,现在,当页面打开时,计时器会立即运行。我认为这与时间间隔有关,但我不确定该改变什么 如何更改此选项,使其仅在单击按钮时运行?(第二次单击按钮时计时器停止) 代码如下: var itemClick = document.getElementById('item1'); itemClick.addEventListener('click', function(){ itemHandler(); }) var c

我有一个倒计时2小时的计时器。我希望计时器仅在按下按钮item1时运行。但是,现在,当页面打开时,计时器会立即运行。我认为这与时间间隔有关,但我不确定该改变什么

如何更改此选项,使其仅在单击按钮时运行?(第二次单击按钮时计时器停止)

代码如下:

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秒。非常感谢。