JQuery key code для командной клавиши
Я прочитал jQuery Event Keypress: какой ключ был нажат? и Как проверить, нажата ли клавиша во время клика? событие с jquery?
Однако мой вопрос в том, можно ли получить одно и то же ключевое событие для всех браузеров? В настоящее время я знаю, что Firefox дает кнопке command (Mac) код 224, в то время как Chrome и Safari дают ей значение 91. Лучше всего просто проверить, какой браузер используется пользователем, и закрепить клавишу нажатой на нее или есть способ, чтобы я мог получить 1 key code во всех браузерах?
Примечание. Я получаю значение с помощью:
var code = (evt.keyCode ? evt.keyCode : evt.which);
Я бы не хотел использовать плагин, если это возможно, потому что мне нужно только знать о кнопке command/ctrl (Windows system).
Ответы
Ответ 1
jQuery уже обрабатывает это. Чтобы проверить, было ли нажато управление, вы должны использовать:
$(window).keydown(function (e){
if (e.ctrlKey) alert("control");
});
Список ключей-модификаторов:
e.ctrlKey
e.altKey
e.shiftKey
И как предложил fudgey:
e.metaKey
Может работать над MAC. Некоторые другие способы здесь также.
Ответ 2
Если вас не интересует точный момент нажатия клавиши Command, только если он нажат при нажатии другой клавиши, вы можете использовать свойство metaKey
для события.
В противном случае для событий keydown
и keyup
вам нужно иметь значение keyCode
во всех браузерах. К сожалению, ключ Command не имеет того же key code во всех браузерах, а в левом и правом Command s имеют разные значения в WebKit (соответственно 91 и 93). Я не вижу простого способа обнаружить эти ключи без какого-либо браузера, но может быть и один. Свойство which
определенно не поможет вам.
Для получения дополнительной информации http://unixpapa.com/js/key.html имеет всестороннее покрытие обработки ключевых событий во всех основных браузерах.
Ответ 3
Здесь вы, попробуйте этот live в этом фрагменте кода:
$(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>