2016-11-23 100 views
0

我试图确定键入时按下了多长时间。功能只在我输入时运行

这里是我的javascript:

var keyDownTimer = 0; 
var keyUpTimer = 0; 
var keyPressedCounter = 0; 
var dt; 
var keyDownDisplay = document.getElementById("keyDownTimer"); 
var keyPressedDisplay = document.getElementById("keyPressed"); 
keyDownDisplay.innerHTML = keyDownTimer; 
keyPressedDisplay.innerHTML = keyPressedCounter; 
function keypressed(){ 
keyPressedCounter++; 
    keyPressedDisplay.innerHTML = keyPressedCounter; 
} 
function keydown(){ 
    dt = setInterval(addDownTime, 1); 
} 
function addDownTime(){ 
    keyDownTimer++; 
    keyDownDisplay.innerHTML = keyDownTimer/1000; 
} 
function keyup(){ 
    clearInterval(dt); 
} 

和我的HTML

<style> 
     div{ 
     height:25px; 
     width:100px; 
     display:inline-block; 
     margin-right:10px; 
     } 
    </style> 
</head> 
<body> 
<div id="keyUpTimer"></div><div id="keyDownTimer"></div><div id="keyPressed"></div> 
<input id="textBox" type="text" onkeyup="keyup()" onkeydown="keydown()" onkeypress="keypressed()"> 

,因为我在文本框中我打字,一切工作正常,但后来由于某种原因,keyDownTimer刚刚开始运行,就好像keydown()不会运行一样。 我知道我的代码有点难以阅读,但我很确定它的正确性。并且它应该正常运行。慢慢地打字似乎有助于解决问题,但它仍然运行无限。 任何帮助,将不胜感激。如果你能解释为什么它在做什么,那会很好。

+0

会发生什么事,如果你按(住)A,然后按B,然后松开两?这种情况在快速输入时经常发生......(想想在这种情况下'dt'会发生什么!) – psmears

回答

0

你正在替换你的dt变量,它引用了很多时间间隔。

问题是当你同时按下多个按键,第一个按键的dt被第二个按键取代,等等。

试试这个:

var dt = 0; 
... 
function keydown(){ 
    if(dt == 0){ 
    dt = setInterval(addDownTime, 1); 
    } 
} 
function addDownTime(){ 
    keyDownTimer++; 
    keyDownDisplay.innerHTML = keyDownTimer/1000; 
} 
function keyup(){ 
    clearInterval(dt); 
    dt = 0; 
}