繁体   English   中英

按住键时会反复触发jQuery keypress事件-但并非在所有键上都会触发

[英]jQuery keypress event fires repeatedly when key is held - but not on all keys

这可能是预期的行为,或者至少不是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对此进行测试。

这是设计使然,是浏览器相关的功能,还是与操作系统甚至键盘本身有关? 还有没有人得到将要重复的按键列表和不会重复的按键列表?

就用例而言,并没有真正的用例-当我将动画绑定到光标按下并在按下键时开始看到奇怪的行为时,这种情况就出现了。 我的解决方法是改用keyup()事件,并在keydown()事件上对我所迷惑的键使用preventDefault() ,以停止光标滚动屏幕。

更新:似乎在keypress事件上,大多数字母的keyCode始终为0 ,这可能与为什么我认为处理程序只触发一次有关。 经过更多测试后,我看到了重复的日志条目,例如游标。 但是,如果您检查jQuery API页面并使用该示例,它将显示我所描述的行为: http : //api.jquery.com/keypress/

仍然无法解释自己:/

行为因浏览器和操作系统而异。 下一页在第2.2节中详细介绍了自动重复键事件的主题:

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

这个问题已经存在了很长时间,但是我想我刚刚发现了解决方法。 这似乎很好

$("#search_query").keyup(function(event) {

    //this will void fake keypresses
    if(event.charCode == 0 && event.keyCode == 0) {
        return false;
    }

    //place the rest of you code here
});

另外-为了使所有查看此帖子的人受益:尝试“ keydown”方法

按键会被触发多次...按键不会

http://jquerymobile.com/demos/1.0a2/experiments/api-viewer/docs/keypress/index.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM