Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to trap double key press in javascript?

I would like to be able to trap the double key press (for the Char T for example) in order to do some special processing.I would like the key presses to happen fast enough to not be interpreted as two separate presses, just like the double click. Any ideas how i can achieve this?

like image 223
ak3nat0n Avatar asked Aug 03 '09 18:08

ak3nat0n


2 Answers

When the key(s) are hit, make a note of the time. Then compare it with the time you noted the last time they key(s) were hit.

If the difference is within your threshold, consider it a double. Otherwise, don't. Rough example:

var delta = 500;
var lastKeypressTime = 0;
function KeyHandler(event)
{
   if ( String.fromCharCode(event.charCode).toUpperCase()) == 'T' )
   {
      var thisKeypressTime = new Date();
      if ( thisKeypressTime - lastKeypressTime <= delta )
      {
        doDoubleKeypress();
        // optional - if we'd rather not detect a triple-press
        // as a second double-press, reset the timestamp
        thisKeypressTime = 0;
      }
      lastKeypressTime = thisKeypressTime;
   }
}
like image 178
Shog9 Avatar answered Oct 19 '22 03:10

Shog9


Have a variable (perhaps first_press) that you set to true when a keypress event happens, and start a timer that will reset the variable to false after a set amount of time (however fast you want them to press the keys).

In your keypress event, if that variable is true then you have a double press.

Example:

var first_press = false;
function key_press() {
    if(first_press) {
        // they have already clicked once, we have a double
        do_double_press();
        first_press = false;
    } else {
        // this is their first key press
        first_press = true;

        // if they don't click again in half a second, reset
        window.setTimeout(function() { first_press = false; }, 500);
    }
}
like image 43
Brian Ramsay Avatar answered Oct 19 '22 05:10

Brian Ramsay