Подтвердить что ты не робот

К какому ключу относится e.metaKey в JavaScript MouseEvent?

MouseEvent.metaKey, похоже, не работает. И в FireFox, и в Chrome он возвращает false даже если я нажимаю клавишу Win:

<!doctype html>
<button onclick=alert(event.metaKey)>click while holding "meta key"</button>
4b9b3361

Ответ 1

Если вы спрашиваете, какой ключ вам нужно нажать на систему Windows, чтобы свойство MouseEvent metaKey было true, ответ заключается в том, что он зависит от браузера. И некоторые браузеры Windows просто не поддерживают его и всегда возвращают false или undefined.

Я не смог найти обновленную карту поддержки браузера для metaKey, хотя есть действительно старый на QuirksMode.org.

Если вы используете jQuery, metaKey является одним из свойств события, которое нормализуется для совместимости с несколькими браузерами.

Если вам нужно реализовать событие key + mouse для некоторых функций вашего сайта, я бы использовал ключ Shift, чтобы он работал на всех системах. (Если вам нужно более одного ключевого варианта, я бы предложил вам пересмотреть ваш дизайн.)

Ответ 2

Эмпирическое тестирование показывает следующие результаты. Не то, чтобы jQuery не делал ужасно хорошую работу по нормализации ^ F.

На Mac в Safari версии 5.1.7 и 6.0.

 F   Keypress: 102, 102  
⌘F   Keypress: 102, 102  meta 
⌥F   Keypress: 402, 402  alt 
⌃F   Keypress: 6, 6  ctrl
⇧F   Keypress: 70, 70  shift 

На Mac в Firefox 15.0.1:

 F   Keypress: 102, 0
⌘F   Keypress: 102, 0 meta 
⌥F   Keypress: 402, 0 alt
⌃F   Keypress: 102, 0 ctrl
⇧F   Keypress: 70, 0 shift

На Mac в Google Chrome 18.0.1024.168:

 F   Keypress: 102, 102
⌘F   (No triggers sent for ⌘ + key)
⌥F   Keypress: 402, 402 alt
⌃F   Keypress: 6, 6 ctrl
⇧F   Keypress: 70, 70 shift

Тестовый код:     //jquery -1.7.2

  $(document.defaultView).keypress(function(e) {
      console.log("Keypress: " + e.which + ", " + e.keyCode, " "
          + (e.metaKey ? "meta " : "")
          + (e.ctrlKey ? "ctrl " : "")
          + (e.altKey ? "alt " : "")
          + (e.shiftKey ? "shift " : ""));
  });

Ответ 3

К какому ключу относится MouseEvent.metaKey?

Он ссылается на ключ окна Windows Key

Почему приведенный выше код не работает?

Из-за bug по крайней мере Firefox 48, см. docs для получения дополнительной информации.

Решение:

Используйте shiftKey вместо этого. Который имеет свойство с тем же именем в объекте события.