Этот поток почти решил мою проблему: может ли jQuery.keypress() обнаруживать одновременно несколько ключей?
Однако, с указанным кодом. Если вы нажмете CTRL + C, чтобы скопировать некоторый текст, а затем отпустите, число останется на "1", пока вы не нажмете CTRL и R отдельно.
Код:
var keys_count = 0;
var keys = {};
$(document).keydown(function (e) {
if(keys[e.which]) return;
keys_count = keys_count + 1;
keys[e.which] = true;
printKeys();
});
$(document).keyup(function (e) {
keys_count = keys_count - 1;
delete keys[e.which];
printKeys();
});
function printKeys() {
$('#out').html(keys_count);
}
Попробуйте мой пример здесь: http://jsfiddle.net/gFcuU/524/
Любые идеи, как избежать этого?
Я просто хочу отслеживать, если текущий пользователь просто набирает несколько букв или выполняет команду, то есть CTRL + C, CTRL + A и т.д. Но, может быть, есть более простой метод, который я нашел до сих пор?
Самое простое - проверить event.ctrlKey
:
$(document).keydown(function (e) {
if (e.ctrlKey) {
$('#ctrl').text("true");
} else {
$('#ctrl').text("false");
}
});
Вы также можете комбинировать это с тестами для обычных клавиш. Например:
if (e.ctrlKey && e.which == 67) {
Обработчик событий содержит некоторые данные, e, в которых указывается, была ли какая-то комбинация клавиш, которые могли бы быть полезными. e.shiftKey и e.ctrlKey являются логическими, которые говорят вам, были ли удержаны эти клавиши при нажатии на них.
Имейте в виду, что вы, вероятно, захотите e.preventDefault() при разрешении такого рода действий, чтобы пользователь мог нажать ctrl + a и не выбрать все на странице.