javascript - jQuery 按键事件在按住键时重复触发 - 但不是在所有键上

标签 javascript jquery keypress

这可能是预期的行为,或者至少不是 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 节中详细介绍了自动重复按键事件的主题:

http://unixpapa.com/js/key.html

关于javascript - jQuery 按键事件在按住键时重复触发 - 但不是在所有键上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9098168/

相关文章:

javascript - 创建一个没有 JSON.parser 的解析器

javascript - 用于保存解析的 csv 公交路线数据的数据结构

android - jQuery Mobile 是否有相当于 Android 的 ViewPager 的功能?

Python:从 Qt Designer 创建的 QPlainTextWidget 获取击键

javascript - 地理位置响应 country_name 在 Safari 中不起作用

javascript - XML 解析错误 : no root element found Location in Console FF

c# - MVC4 无效的日期时间值

jquery - 禁用输入字段时 JQuery 中的按键停止工作

c# - C# 中 WinForm TextBox 中数字的按键事件

javascript - React 调用另一个组件