![](/img/trans.png)
[英]jQuery using keydown/keyup/keypress event to fire only one time instead of multiple times when key held down
[英]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节中详细介绍了自动重复键事件的主题:
这个问题已经存在了很长时间,但是我想我刚刚发现了解决方法。 这似乎很好
$("#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.