jQuery按键箭头键
我试图捕获jQuery中的箭头键,但没有事件被触发。
$(function(){ $('html').keypress(function(e){ console.log(e); }); });
这会生成字母数字键的事件,但删除,箭头键等不会生成事件。
我做错了什么,不捕捉这些?
这里是一个例子: JSnippet DEMO keydown()vs keypress()
你应该使用.keydown()
因为.keypress()
会忽略“箭头”,用于捕获键types使用e.which
按下结果屏幕进行对焦(在右下angular的小提琴屏幕上),然后按方向键看看它是否工作。
笔记:
-
.keypress()
永远不会被用Shift,Esc和delete来触发,但是.keydown()
会。 - 实际上,某些浏览器中的
.keypress()
会被箭头键触发,但它不是跨浏览器的,所以使用.keydown()
更可靠。
更有用的信息
- 你可以使用事件对象的
.keyCode
或者.keyCode
– 有些浏览器不支持其中的一个,但是当使用jQuery的时候,它的安全使用了两者,因为jQuery标准化了事物。 (我更喜欢。这从来没有问题)。 - 如果你想用实际捕获的键检测
ctrl
/alt
/shift
按键,你应该检查事件对象的.ctrlKey
,.altKey
和.shiftKey
属性 – 如果它们被使用,它们将是TRUE。 -
最后 – 这里有一些有用的键码(完整列表 – 键码 – 备忘录 ):
- input:13
- 上:38
- 下来:40
- 对:39
- 左:37
- Esc:27
- 太空条:32
- Ctrl:17
- Alt:18
- class次:16
$(document).keydown(function(e) { console.log(e.keyCode); });
按键事件检测方向键,但不是在所有的浏览器。 所以最好使用keydown。
这些是您应该在控制台日志中获得的键码:
- 左= 37
- up = 38
- 对吧?
- 下= 40
你可以检查一个箭头键是否被按下:
$(document).keydown(function(e){ if (e.keyCode > 36 && e.keyCode < 41) alert( "arrowkey pressed" ); });
jsfiddle演示
请参阅JQuery的链接
http://api.jquery.com/keypress/
它说
当浏览器注册键盘input时,keypress事件被发送到一个元素。 这与keydown事件类似,除了修饰符和非打印键(如Shift,Esc和delete)触发keydown事件而不是按键事件。 这两个事件之间的其他差异可能会出现,取决于平台和浏览器。
这意味着你不能在箭头的情况下使用按键。
$(document).on( "keydown", keyPressed); function keyPressed (e){ e = e || window.e; var newchar = e.which || e.keyCode; alert(newchar) }