1

我一直想知道是否有一种简单的方法可以检测用户是否在一秒钟内两次按下键盘上的相同字符。我已经编写了一些有效的代码,但它不可靠。

var escapeCount = 0;

 function reset() {
   escapeCount = 0;
   setTimeout('reset();', 1000);
 }

 window.onload = function() {
   reset();
 };

 document.onkeyup = function(e) {
   if (!e) var e = window.event;
   var code = e.keyCode ? e.keyCode : e.which;
   if (code == 27) escapeCount +=1;
   if (escapeCount == 2) {
     // stuff on second escape
   }
 };

有一个更好的方法吗?谢谢

4

2 回答 2

5

在按下最后一个字符后 1 秒后重置是有意义的。例子:

var lastChar = -1;

document.onkeyup = function(e) {
  if (!e) var e = window.event;
  var code = e.keyCode ? e.keyCode : e.which;

  if (lastChar == code) {
    // Same key was pressed twice in a row within 1 second.
  } else {
    lastChar = code;
    setTimeout(function() {lastChar = -1;}, 1000);
  }
};
于 2010-01-22T01:24:13.783 回答
0

您的计时器每秒重置一次,因此您不仅必须在最后一次 Escape 后的一秒钟内再次按 Escape,而且在两次按下之间也必须没有超时。

忘记超时可能更容易,而只记住最后一次按键的时间:

var lastescapetime= null;

document.onkeyup= function(event) {
    if (event===undefined) event= window.event;
    if (event.keyCode===27) {
        var now= new Date().getTime();
        if (lastescapetime!==null && now<lastescapetime+1000) {
            alert('You double-escaped!');
            lastescapetime= null;
        } else {
            lastescapetime= now;
        }
    } else {
        lastescapetime= null;
    }
};
于 2010-01-22T01:29:20.133 回答