Отслеживание реального количества текущих ключей вниз

0

Этот поток почти решил мою проблему: может ли 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 и т.д. Но, может быть, есть более простой метод, который я нашел до сих пор?

  • 0
    основатель и создатель jQuery создал отличный маленький плагин для горячих клавиш ... берет много ручного кодирования ключевых кодов из картинки github.com/jeresig/jquery.hotkeys
  • 0
    У меня нет ответа, но я написал нечто подобное, потому что я воспринял твой вопрос как вызов. Вы можете попробовать нажать несколько клавиш. Хотя есть проблема. Если вы нажмете слишком долго, массив не очистится. Так или иначе. Проверь мою любительскую работу Fiddle :)
Теги:

2 ответа

2
Лучший ответ

Самое простое - проверить event.ctrlKey:

$(document).keydown(function (e) {
    if (e.ctrlKey) {
        $('#ctrl').text("true");
    } else {
        $('#ctrl').text("false");
    }
});

FIDDLE

Вы также можете комбинировать это с тестами для обычных клавиш. Например:

if (e.ctrlKey && e.which == 67) {

API объектов событий jQuery

  • 0
    Спасибо тебе за это. Я приму этот ответ как правильный, однако, проблема все еще сохраняется на macbooks, так как нет "cmdKey" :(
  • 0
    Привет, Джеффман, почему ты вдруг удалил все свои учетные записи на SE? Я надеюсь, что все хорошо!
1

Обработчик событий содержит некоторые данные, e, в которых указывается, была ли какая-то комбинация клавиш, которые могли бы быть полезными. e.shiftKey и e.ctrlKey являются логическими, которые говорят вам, были ли удержаны эти клавиши при нажатии на них.

Имейте в виду, что вы, вероятно, захотите e.preventDefault() при разрешении такого рода действий, чтобы пользователь мог нажать ctrl + a и не выбрать все на странице.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню