Как узнать, произошло ли событие из правой клавиши Ctrl?

У меня есть прослушиватель событий в Javascript, я могу определить, является ли ключевым событием Ctrl (e.keyCode == 17), но как я могу узнать, что этот Ctrl идет с правой или левой?

Ответ 1

Я не думаю, что keyCode отличается.

Вы можете использовать e.ctrlKey для лучшего способа определить, нажата ли клавиша управления.

Кажется, Flash не может указать, какой из них нажат (либо это, либо неправильно закодировано).

Ответ 2

Простое замечание: я бы не основывал архитектуру/дизайн на доступности правильного ключа управления - на многих клавиатурах ноутбуков могут не быть двух клавиш управления.

Ответ 3

MSIE предоставляет свойство ctrlLeft для большинства событий. Значения свойств:

  • true, если во время события нажата левая клавиша
  • false, если левая клавиша не была нажата.

Вы можете комбинировать event.ctrlKey и event.ctrlLeft, чтобы определить, была ли нажата правая клавиша Ctrl:

if (event.ctrlKey) {
    if (event.ctrlLeft) {
        // left Ctrl key pressed
    } else {
        // right Ctrl key pressed
    }
} else {
    // no Ctrl key pressed
}

Обратите внимание, что свойство ctrlLeft в keyup равно undefined, потому что клавиша Ctrl больше не нажата.

Протестировано в MSIE7 и MSIE9. Не работает в Firefox.

Подробнее см. http://help.dottoro.com/ljqlvhuf.php.

Ответ 4

Если вы проследите его, вы найдете тот же ключ для обоих (17). Я думаю, что невозможно отличить

Ответ 5

Я не знаю, было ли это доступно, когда это было задано, но вы можете различать left- from right-ctrl, а также alt и shift. Теперь вы можете использовать свойства KeyboardEvent.DOM_KEY_LOCATION_ *, чтобы сделать это различие.

Смотрите Может ли javascript указать разницу между клавишей сдвига влево и вправо?

Помните, однако, что я обнаружил, что у Chrome, похоже, есть дефект в его реализации. См. Как я могу различать клавиши слева и справа, ctrl и alt onkeyup в Chrome с Javascript

Ответ 6

Существует свойство event.location для левой клавиши ctrl, это будет 1 для правой 2, вы можете проверить поддержку браузера на canIuse

if (e.which == 17) {
   if (event.location == 1) {
      // left ctrl key
   } else if (event.location == 2) {
      // right ctrl key
   }
}