Код ключа jQuery для ключа команды - PullRequest
47 голосов
/ 30 сентября 2010

Я прочитал jQuery Event Keypress: Какая клавиша была нажата? и Как я могу проверить, нажата ли клавиша во время события клика с jquery?

Однако мойвопрос в том, сможете ли вы получить одно и то же ключевое событие для всех браузеров?В настоящее время я знаю, что Firefox дает кнопке command (Mac) код 224, в то время как Chrome и Safari дают ему значение 91. Это лучший способ просто проверить, какой браузер использует пользователь, и основать нажатую клавишуэто или есть способ, чтобы я мог получить 1 код ключа во всех браузерах?Заметьте, я получаю значение с помощью:

var code = (evt.keyCode ? evt.keyCode : evt.which);

Я хотел бы не использовать плагин, если это возможно, только потому, что мне нужно знать только о команде / ctrl (система Windows) нажата клавиша.

Ответы [ 3 ]

81 голосов
/ 30 сентября 2010

jQuery уже справляется с этим.Чтобы проверить, нажата ли кнопка управления, вы должны использовать:

$(window).keydown(function (e){
    if (e.ctrlKey) alert("control");
});

Список клавиш-модификаторов:

e.ctrlKey
e.altKey
e.shiftKey

И, как предложил Фуджи:

e.metaKey

Может работать на MAC.Некоторые другие способы здесь .

11 голосов
/ 30 сентября 2010

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

В противном случае, для keydown и keyup событий, вам нужно свойство keyCode во всех браузерах.К сожалению, клавиша Command не имеет одинакового кода клавиши во всех браузерах, а левая и правая Command s имеют разные значения в WebKit (91 и 93 соответственно).Я не вижу простого способа обнаружить эти ключи без какого-либо браузера, но может быть один.Свойство which определенно вам не поможет.

Для получения дополнительной информации, http://unixpapa.com/js/key.html имеет исчерпывающий охват обработки ключевых событий во всех основных браузерах.

1 голос
/ 29 апреля 2016

Вот, пожалуйста, попробуйте это вживую в следующем фрагменте кода:

$(window).on('keypress', function(event) {
  $("body").append($("<p>").text(
       "ctrlKey " + event.ctrlKey
    + "; altKey " + event.altKey
    + "; metaKey " + event.metaKey
    + "; shiftKey " + event.shiftKey
    + "; isCommandPressed " + isCommandPressed(event)
  ));
  
});

function isCommandPressed(event) {
  return event.metaKey && ! event.ctrlKey;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<p>Focus on this select control and try pressing keys:</p>

<p><select><option>Test</option></select></p>
...