这可能是预期的行为,或者至少不是 jQuery/js 问题,但如果有任何问题,我想澄清一下。
采取以下措施:
$(document).bind('keypress', function(e){
switch(e.keyCode)
{
case 37:
console.log('left cursor keydown, will fire on hold');
break;
case 39:
console.log('right cursor keydown, will fire on hold');
break;
case 80:
console.log('p will only fire once per press!');
break;
}
});
您还可以使用 jQuery 文档中的示例:http://api.jquery.com/keypress/
当按下左光标或右光标(或许多其他键,例如 A、E、[、
等)时,事件将触发,您会在控制台中收到一条不错的日志消息。一切都很好,符合预期。但是,现在尝试按住该键 - 在短暂的暂停后,您会看到当您按住该键时 keydown 事件会触发多次,但是如果您尝试按下 p
(或者,例如, j
), 它只会触发一次。
我正在使用 FF 9.0.1 和 mac OSX 10.7.1 以及 jQuery 1.7.1 对此进行测试。
这是设计使然,它是依赖于浏览器的功能,还是与操作系统有关,甚至与键盘本身有关?还有人有一份会重复的键和不会重复的键的列表吗?
就用例而言,并没有真正的用例 - 这只是在我将动画绑定(bind)到光标按下时突然出现,并在按下键时开始看到奇怪的行为。我的解决方法是改用 keyup()
事件,并在 keydown()
事件上使用 preventDefault()
我感兴趣的键, 停止光标滚动屏幕。
更新:
似乎在按键事件中,大多数字母的 keyCode 总是 0
,这可能与我认为处理程序只触发一次的原因有关。经过更多测试后,我看到重复的日志条目,例如游标。如果您查看 jQuery API 页面,并使用该页面上的演示,它会显示出我描述的行为:http://api.jquery.com/keypress/
我自己还是无法解释:/
最佳答案
行为因浏览器和操作系统而异。以下页面在 2.2 节中详细介绍了自动重复按键事件的主题:
关于javascript - jQuery 按键事件在按住键时重复触发 - 但不是在所有键上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9098168/