Получить список нажатых в данный момент клавиш без нажатия клавиши вверх/вниз

Сегодня у меня возникла любопытная проблема: скрипт, который всегда работал раньше, перестал работать, потому что, по-видимому, «keyup» запускался сразу после каждого события «keydown», убивая некоторые события, которые ожидали длинных нажатий клавиш.

После тестирования я обнаружил, что моя синергия была ответственна за это.

Наконец, я нашел решение проблемы: расширение jQuery, которое позволяло мне задерживать (и собирать) определенные события, а именно http://benalman.com/projects/jquery-throttle-debounce-plugin/

$(window).keyup( $.debounce(100, onKeyUp) )

Это работало некоторое время, пока я не заметил другую проблему: несколько ключей одновременно. Скажем, вы нажимаете кнопку «вверх» и кнопку «влево», а затем отпускаете обе одновременно. $.debounce() будет обрабатывать оба события как одно и то же событие keyup, позволяя событию срабатывать только один раз и заставляя event.keyCode содержать только одну клавишу вместо обеих.

Самым простым решением было бы проверить все клавиши, нажатые при запуске события keyup, не полагаясь на event.keyCode, поскольку в этом случае он неполный.

Моя проблема: как я могу узнать, какие другие клавиши все еще нажаты, не полагаясь на события keydown/keyup? (поскольку они не будут работать из-за синергии)

function onKeyUp(event) {
    // get all keys pressed
}

Есть ли какая-то переменная window, отслеживающая ключи?

Есть идеи?


person Katai    schedule 16.05.2013    source источник
comment
Не могли бы вы объяснить, что вы пытаетесь сделать (с самого начала)?   -  person Dogbert    schedule 16.05.2013
comment
Я хочу получить список всех клавиш, которые в настоящее время нажимаются (и удерживаются) пользователем, не полагаясь на события keyup/keydown.   -  person Katai    schedule 16.05.2013
comment
И что вы подразумеваете под my synergy was responsible for that?   -  person Dogbert    schedule 16.05.2013
comment
синергия позволяет использовать одну и ту же клавиатуру/мышь между двумя компьютерами. По-видимому, это вызывает некоторые проблемы с событиями keydown/keyup (после каждого события keydown запускается событие keyup, даже если вы еще не отпускали клавишу) — это вызывает некоторые проблемы, если вы пытаетесь что-то сделать, пока пользователь нажимает клавишу   -  person Katai    schedule 16.05.2013
comment
Ваш вопрос очень похож на один из моих собственных вопросов (на который уже есть ответ): stackoverflow.com/questions/13640061/   -  person Anderson Green    schedule 11.06.2013
comment
Андерсон Грин - на этот вопрос есть ответ, который использует keyup/keydown, поэтому определенно не имеет значения.   -  person DAG    schedule 21.08.2017