javascript计时器在第一次按键时启动

时间:2013-11-06 15:16:58

标签: javascript html

我有一个带有计时器的html页面。我正在使用按键事件启动计时器,但我希望它仅针对第一个键执行。我正在使用一个变量来捕获另一个按下的函数中的总键,我有类似的东西:if(totaAttempts==1)启动计时器,但是使用这个解决方案,计时器正确启动,但是当一个键时它会踩踏再次按下。有更好的想法吗? 提前致谢

function setTime() {
    if (totalAttempts == 1) {
        ++totalSeconds;
        secondsLabel.innerHTML = pad(totalSeconds % 60);
        minutesLabel.innerHTML = pad(parseInt(totalSeconds / 60));
    }
}

function pad(val) {
    var valString = val + "";
    if (valString.length < 2) {
        return "0" + valString;
    } else {
        return valString;
    }
}

2 个答案:

答案 0 :(得分:0)

添加一个名为(类似)'start'的变量。

最初设为0。

按键,将其设为1.

使用:

if( start == 0){
    ... timer ...
}

取代

if (totalAttempts == 1) {
    ... timer ...
}

应该这样做。 。

答案 1 :(得分:0)

创建一个标志变量,例如var hasRan。将其初始化为false,然后在运行时将其设置为true。并用if(!hasRan) {...包裹函数的内部。然后在hasRan事件上将keyUp变量设置为false。

编辑:

这是你的意思吗?

var hasStarted = false;

element.onkeypress = function() {

    if(!hasStarted) {
        setTimeout(setTime, 1000);
        hasStarted = true;
    }

}

element.onblur = function() {
    hasStarted = false;
}

function setTime() {

    ++totalSeconds;
    secondsLabel.innerHTML = pad(totalSeconds % 60);
    minutesLabel.innerHTML = pad(parseInt(totalSeconds / 60));
    hasStarted = false;

}
function pad(val) {

    var valString = val + "";
    if (valString.length < 2) {
        return "0" + valString;
    } else {
        return valString;
    }

}