Javascript на второе нажатие клавиши - PullRequest
1 голос
/ 22 января 2010

Мне было интересно, был ли простой способ определить, нажимает ли пользователь один и тот же символ на клавиатуре дважды в течение одной секунды. Я написал некоторый код, который работает, но он ненадежен.

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

Есть ли лучший способ сделать это? Спасибо

Ответы [ 2 ]

5 голосов
/ 22 января 2010

Было бы целесообразно выполнить сброс через 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);
  }
};
0 голосов
/ 22 января 2010

Ваш таймер сбрасывается каждую секунду, так что вам нужно не только снова нажать 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;
    }
};
...