0

我有一个带有计时器的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;
    }
}
4

2 回答 2

0

添加一个名为(类似于)“started”的变量。

初始设置为 0。

在按键时,将其设置为 1。

利用:

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

代替

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

应该这样做。. .

于 2013-11-06T15:30:10.340 回答
0

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

编辑:

你是这个意思吗?

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;
    }

}
于 2013-11-06T15:32:53.813 回答