На какой ключ ссылается e.metaKey в JavaScript MouseEvent?

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

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

MDN указывает:

Доступное только для чтения свойство MouseEvent.metaKey возвращает Boolean< /em>, который указывает, была ли нажата клавиша Meta (true) или нет (false) при возникновении события.

Примечание. На клавиатурах Macintosh это командная клавиша (). На клавиатурах Windows это клавиша Windows ().

Совместимость с браузером

введите здесь описание изображения

MDN утверждает, что MouseEvent.metaKey поддерживается в FireFox и Chrome, но не работает.

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

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


person Pacerier    schedule 05.06.2011    source источник


Ответы (3)


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

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

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

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

person nnnnnn    schedule 06.06.2011
comment
Это все еще не работает. (Кстати, я обновил вопрос.) - person Pacerier; 02.07.2015

Эмпирическое тестирование показывает следующие результаты. Нельзя сказать, что 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 " : ""));
  });
person Orwellophile    schedule 09.10.2012
comment
Все еще не работает. Вам действительно удалось получить значение как true? - person Pacerier; 02.07.2015
comment
@Pacerier - Мои тесты проводились с событием нажатия клавиши, а не с мышью, это плохо. - person Orwellophile; 27.07.2015
comment
@Pacerier - Некоторые тесты с Chrome в OS X показывают те же результаты, что и для Safari, метаКей устанавливается при нажатии ⌘. - person Orwellophile; 31.07.2015

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

Это относится к ключу Windows Ключ Windows

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

Из-за ошибки по крайней мере в Firefox 48 см. документы для получения дополнительной информации.

Решение :

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

person user10089632    schedule 19.08.2017