Как обрабатывать Ctrl + стрелка в Javascript? - PullRequest
8 голосов
/ 22 апреля 2010

Я заметил проблему при попытке отловить сочетание клавиш: CTRL + стрелка.

Я обработал событие нажатия клавиш. Теперь, когда я удерживаю клавишу CTRL , событие keydown запускается один раз. Если я держу стрелку (так что теперь я держу CTRL + стрелка), это не вызовет другое событие. Это запрещено по какой-либо причине? Думаю, я уже сталкивался с этой проблемой в Opera несколько лет назад, и в браузере была опция для этого.

Мои результаты:

  • удерживая CTRL , нажмите стрелку - запускает событие для CTRL и не запускает событие для стрелки

  • нажмите CTRL + стрелка сразу - запускает одно событие, но только с кодом ключа CTRL .

  • удерживая CTRL , нажмите букву (например, S ) - работает как положено

  • нажмите CTRL + буква (например, S ) - работает как положено

(Результаты идентичны в Chrome и Firefox. Является ли описанное выше поведение стандартным?)

Я использую:

  • function OnKeyDown(e) { }
  • e.ctrlKey, то есть свойства события

Вопрос: в чем может быть проблема?

1 Ответ

12 голосов
/ 22 апреля 2010

Вы должны проверить, установлен ли флаг event.ctrlKey, что-то вроде этого:

document.getElementById('element').onkeydown = function (e) { 
  e = e || window.event;
  var keyCode = e.keyCode || e.which,
      arrow = {left: 37, up: 38, right: 39, down: 40 };

  if (e.ctrlKey) {
    switch (keyCode) {
      case arrow.left:
      //... handle Ctrl-LeftArrow
      break;
      //...
    }
  }
};

Проверьте пример здесь .

...