我试图在 jQuery 中捕获箭头键按下,但没有触发任何事件。
$(function(){
$('html').keypress(function(e){
console.log(e);
});
});
这会为字母数字键生成事件,但删除、箭头键等不会生成事件。
不捕捉那些我做错了什么?
我试图在 jQuery 中捕获箭头键按下,但没有触发任何事件。
$(function(){
$('html').keypress(function(e){
console.log(e);
});
});
这会为字母数字键生成事件,但删除、箭头键等不会生成事件。
不捕捉那些我做错了什么?
您应该使用.keydown()
因为.keypress()
将忽略“箭头”,用于捕获键类型使用e.which
按结果屏幕聚焦(小提琴屏幕右下角),然后按箭头键查看它的工作。
笔记:
.keypress()
永远不会被 Shift、Esc 和 Delete 触发,但.keydown()
会。.keypress()
在某些浏览器中会由箭头键触发,但它不是跨浏览器,因此使用更可靠.keydown()
。更多有用信息
.which
Or .keyCode
- 一些浏览器不支持其中之一,但是当使用 jQuery 时,可以安全地使用两者,因为 jQuery 标准化了事物。(我更喜欢.which
从来没有遇到过问题)。ctrl | alt | shift | META
使用实际捕获的键检测按下,您应该检查事件对象的以下属性 - 如果它们被按下,它们将被设置为 TRUE:
event.ctrlKey
- 控制 event.altKey
- 替代event.shiftKey
- 转移event.metaKey
- META(命令 ⌘ 或 Windows 键)最后 - 这里有一些有用的密钥代码(对于完整列表 - keycode-cheatsheet):
$(document).keydown(function(e) {
console.log(e.keyCode);
});
Keypress 事件会检测箭头键,但不是在所有浏览器中。所以最好使用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 事件)。根据平台和浏览器的不同,可能会出现两个事件之间的其他差异。
这意味着您不能在箭头的情况下使用按键。