Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript定时器在第一次按键时启动_Javascript_Html - Fatal编程技术网

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

javascript定时器在第一次按键时启动,javascript,html,Javascript,Html,我有一个带有计时器的html页面。我用按键事件启动计时器,但我希望它只对第一个键执行。我使用一个变量来捕捉其他函数中按下的总键数,我有这样的结果:if(totaAttempts==1)启动计时器,但是使用这个解决方案,计时器可以正确启动,但是当再次按下某个键时,计时器会被踩下。还有更好的主意吗? 提前谢谢 function setTime() { if (totalAttempts == 1) { ++totalSeconds; secondsLabel.

我有一个带有计时器的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;
    }
}
函数设置时间(){
如果(总尝试次数==1){
++总秒数;
secondsLabel.innerHTML=pad(总秒数%60);
minutesLabel.innerHTML=pad(parseInt(totalSeconds/60));
}
}
功能板(val){
var valString=val+“”;
如果(valString.length<2){
返回“0”+valString;
}否则{
返回valString;
}
}
添加一个名为(类似“started”的变量)

最初设置为0

按键时,将其设置为1

使用:

代替

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

应该可以了

创建一个标志变量,例如
var hasRan
。将其初始化为
false
,然后在运行时将其设置为
true
。并使用
if(!hasRan){…
包装函数内部。然后在
keyUp
事件中将
hasRan
变量设置为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;
    }

}
var hasStarted=false;
element.onkeypress=函数(){
如果(!hasStarted){
设置超时(设置时间,1000);
hasStarted=true;
}
}
element.onblur=函数(){
hasStarted=false;
}
函数setTime(){
++总秒数;
secondsLabel.innerHTML=pad(总秒数%60);
minutesLabel.innerHTML=pad(parseInt(totalSeconds/60));
hasStarted=false;
}
功能板(val){
var valString=val+“”;
如果(valString.length<2){
返回“0”+valString;
}否则{
返回valString;
}
}

你能展示一些代码吗?你如何调用这些函数?我在一次按键事件中调用函数setTime。我已经尝试过了,解决方案是创建多个计时器,我按的每个字母一个。粘贴整个代码块,这样我就可以获得完整的图片。它可以创建多个计时器,而不再需要更多要查看的代码,这里没有太多内容。xmmm它不起作用。计时器在第一个键上启动,但在一秒钟后停止。在开始增加变量“totalseconds”之前,您是否设置了变量“totalseconds”?在setTime()函数之外?是的,在我设置的函数之外。在按下另一个键之前,计时器工作正常
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;
    }

}