第二次按键时的Javascript

第二次按键时的Javascript,javascript,keypress,onkeypress,Javascript,Keypress,Onkeypress,我一直在想,是否有一种简单的方法可以检测用户是否在一秒钟内按两次键盘上的相同字符。我写过一些这样的代码,但不可靠 var escapeCount = 0; function reset() { escapeCount = 0; setTimeout('reset();', 1000); } window.onload = function() { reset(); }; document.onkeyup = function(e) { if (!e) va

我一直在想,是否有一种简单的方法可以检测用户是否在一秒钟内按两次键盘上的相同字符。我写过一些这样的代码,但不可靠

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

有更好的方法吗?谢谢

在按下最后一个字符后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);
  }
};

在按下最后一个字符后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);
  }
};

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

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

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

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

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

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