Как избежать нескольких нажатий клавиш вверх / вниз / нажатия при удержании клавиши? - PullRequest
3 голосов
/ 08 марта 2010

Я создаю веб-интерфейс для управления маленьким роботом. Ajax вызовы будут сделаны при нажатии клавиши, чтобы запустить робота, и клавиша, чтобы остановить его.

Моя проблема в том, что, когда клавиша удерживается нажатой, события keyup, keydown и нажатия клавиш кажутся непрерывными. Кто-нибудь знает способ срабатывания клавиши при нажатии только при первом нажатии и срабатывания при отпускании?

- изменить: я забыл упомянуть об этом изначально, но я попытался сохранить состояние кнопки. Проблема в том, что события keydown, keypress и keyup запускаются снова и снова, пока я удерживаю клавишу нажатой.

Ответы [ 3 ]

2 голосов
/ 08 марта 2010

Я не могу воспроизвести проблему- Я не нахожу никаких событий keyup, генерируемых keydown, независимо от того, как долго я удерживаю клавишу.

Этот метод прослушивает нажатия клавиш, запускает некоторый код, и ждет нажатия клавиши, прежде чем слушать другую клавишу.

Предупреждение вызывается только при подключении.

var A=[], who=// I used a textarea, substititute your own target
who.onkeydown= who.onkeyup= function(e){
 e=window.event || e;
 var t= e.type, target= e.target || e.srcElement;
 A.push(t);
 if(t== 'keydown'){
  // start robot and stop listening to keydown
  target.onkeydown= '';
 }
 else if(t== 'keyup'){
  // stop robot and listen for keydown
  target.onkeydown= arguments.callee;
  alert(A)
 }
}
1 голос
/ 08 марта 2010

Вы можете попытаться сохранить состояние ключа. Когда клавиша опускается, проверьте, нажата ли клавиша, если нет, запустите робот и отметьте клавишу как нажатую. Если она уже нажата, ничего не делайте. При нажатии на клавишу проделать то же самое для остановки робота и пометить клавишу как не нажатую.

0 голосов
/ 08 марта 2010

Когда вы запускаете своего робота, удалите обработчик событий из события нажатия клавиши и добавьте обработчик события для события keyup, чтобы остановить робота.

Когда сработает событие keyup, остановите робота и добавьте обратно обработчик нажатия клавиши.

РЕДАКТИРОВАТЬ: фактически удалив обработчик события из вашего события keydown. Вы захотите использовать события keydown и keyup ... а не нажатие клавиши.

Так что в основном:

  1. назначить обработчик события keydown
  2. назначить обработчик события keyup
  3. при keydown, удалите обработчик события keydown и запустите своего робота
  4. при keyup, переназначить обработчик события keydown
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...