Сегодня у меня возникла любопытная проблема: скрипт, который всегда работал раньше, перестал работать, потому что, по-видимому, «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
, отслеживающая ключи?
Есть идеи?
my synergy was responsible for that
? - person Dogbert   schedule 16.05.2013