Обнаружить модификатор Alt Gr (Alt Graph) при нажатии клавиши

В яваскрипта Event объекта, есть некоторые логические значения, чтобы проверить, если клавиши - модификаторы нажимаются:

  • ctrlKey: ctrlKey CTRL.
  • altKey: altKey ALT.
  • altLeft: ALT левая клавиша. Только для IE.
  • altGraphKey: altGraphKey ALTGR. Только для Chrome/Safari.

Однако есть некоторые проблемы:

  • IE и Chrome устанавливают для ctrlKey значение true и для altKey значение true когда вы нажимаете модификатор ALTGR.
  • Firefox устанавливает для ctrlKey значение false а для altKey значение true когда вы нажимаете модификатор ALTGR, так как был нажат только ALT.
  • Chrome имеет свойство altGraphKey, но оно всегда undefined.

Вопрос: как я могу отличить нажатие клавиш ALT + CTRL или ALTGR? Специально в Chrome.

Ответ 1

Похоже, что altGraphKey в браузерах webkit больше не существует (по состоянию на сентябрь 2013 года), и поведение Firefox изменилось. Поведение браузера для клавиши AltGr в настоящее время выглядит следующим образом:

  • Webkit (Chrome) - ctrlKey: true, altKey: true
  • IE 8 - ctrlKey: false, altKey: true
  • IE 10 - ctrlKey: правда, altKey: правда
  • Mozilla (Firefox) - ctrlKey: правда, altKey: правда

Иными словами, все они в настоящее время согласованы (кроме IE8, который остается непоследовательным).

Следующий фрагмент должен перехватывать Alt Gr - но не Alt или Ctrl - в современных браузерах. Вам понадобится специальный случай для IE8, однако:

if (event.ctrlKey && event.altKey) {
    // Appears to be Alt Gr
}

Ответ 2

Я думаю, что ключ ALTGR и комбинация клавиш CTRL + ALT - это одно и то же, и нет никакого способа сделать разницу в Javascript. Нажатие ALTGR + e и CTRL + ALT + e производят символ € (евро) на моей клавиатуре/настройке языка. Есть страницы в Интернете, чтобы проверить коды клавиш. Надеюсь, это поможет.

Ответ 3

Отказ от ответственности: у меня нет клавиатуры, у которой есть этот ключ, поэтому я не могу проверить себя, но спецификация говорит, что может использовать key. Это может быть хорошим решением, если вам нужно только поддерживать браузеры, которые его реализуют (на момент написания, только Safari этого не делает). Вы можете проверить, является ли значение "AltGraph".

window.onkeydown = function (e) {
  if (e.key === 'AltGraph') {
    console.log(e.key);
  }
};