Search code examples
javascriptkeypressonkeypress

Javascript on second keypress


I've been wondering if there was a simple way to detect if a user presses the same character on the keyboard twice within one second. I've written some code that kind of works but it's unreliable.

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

Is there a better way to do this? Thanks


Solution

  • It would make sense to reset after 1 second has passed since the last character was pressed. Example:

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