我正在尝试捕获jQuery中的箭头按键,但是没有事件被触发。
$(function(){
$('html').keypress(function(e){
console.log(e);
});
});
这会为字母数字键生成事件,但是删除,箭头键等不会生成事件。
我没有抓到这些错在做什么?
Answers:
您应该使用.keydown()
因为.keypress()
会忽略“箭头”,以便捕获键类型使用e.which
按结果屏幕进行聚焦(在小提琴屏幕的右下方),然后按箭头键查看其工作情况。
笔记:
.keypress()
绝不会使用Shift,Esc和Delete触发,但.keydown()
会触发。.keypress()
在某些浏览器中将由箭头键触发,但不是跨浏览器,因此使用起来更可靠.keydown()
。更有用的信息
.which
或者.keyCode
事件对象的-某些浏览器将不支持其中的一种,但使用jQuery的安全时使用的,因为两者的jQuery标准化的东西。(我更喜欢.which
从来没有问题)。ctrl | alt | shift | META
带有实际捕获键的按下,您应该检查事件对象的以下属性-如果按下它们,它们将设置为TRUE:
event.ctrlKey
-Ctrl event.altKey
-altevent.shiftKey
-换档event.metaKey
-META(命令⌘或Windows键)最后-这是一些有用的键代码(有关完整列表,请参见keycode-cheatsheet):
$(document).keydown(function(e) {
console.log(e.keyCode);
});
按键事件确实会检测箭头键,但并非在所有浏览器中都可以。因此,最好使用keydown。
这些是您应该在控制台日志中获得的键代码:
keypress
给我显示40和38就像keydown
。
您可以通过以下方式检查是否按下了箭头键:
$(document).keydown(function(e){
if (e.keyCode > 36 && e.keyCode < 41)
alert( "arrowkey pressed" );
});
left = 37,up = 38, right = 39,down = 40
$(document).keydown(function(e) {
switch(e.which) {
case 37:
$( "#prev" ).click();
break;
case 38:
$( "#prev" ).click();
break;
case 39:
$( "#next" ).click();
break;
case 40:
$( "#next" ).click();
break;
default: return;
}
e.preventDefault();
});
请参考JQuery的链接
http://api.jquery.com/keypress/
它说
当浏览器注册键盘输入时,会将keypress事件发送到一个元素。这与keydown事件类似,除了修饰键和非打印键(例如Shift,Esc和Delete)会触发keydown事件,而不会触发keypress事件。取决于平台和浏览器,这两个事件之间可能会出现其他差异。
这意味着您不能在箭头的情况下使用按键。