1

我今天遇到了一个奇怪的问题:一个以前总是有效的脚本,因为显然在每个 'keydown' 事件之后直接触发了 'keyup' ,所以停止了工作,杀死了一些等待长时间按键的事件。

经过测试,我发现我的协同作用是造成这种情况的原因。

最后,我找到了解决问题的方法:一个允许我延迟(和收集)某些事件的 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变量跟踪键?

有任何想法吗?

4

0 回答 0