jQuery按键箭头键

我试图捕获jQuery中的箭头键,但没有事件被触发。

$(function(){ $('html').keypress(function(e){ console.log(e); }); }); 

这会生成字母数字键的事件,但删除,箭头键等不会生成事件。

我做错了什么,不捕捉这些?

这里是一个例子: JSnippet DEMO keydown()vs keypress()

你应该使用.keydown()因为.keypress()会忽略“箭头”,用于捕获键types使用e.which

按下结果屏幕进行对焦(在右下angular的小提琴屏幕上),然后按方向键看看它是否工作。

笔记:

  1. .keypress()永远不会被用Shift,Esc和delete来触发,但是.keydown()会。
  2. 实际上,某些浏览器中的.keypress()会被箭头键触发,但它不是跨浏览器的,所以使用.keydown()更可靠。

更有用的信息

  1. 你可以使用事件对象的.keyCode或者.keyCode – 有些浏览器不支持其中的一个,但是当使用jQuery的时候,它的安全使用了两者,因为jQuery标准化了事物。 (我更喜欢。这从来没有问题)。
  2. 如果你想用实际捕获的键检测ctrl / alt / shift按键,你应该检查事件对象的.ctrlKey.altKey.shiftKey属性 – 如果它们被使用,它们将是TRUE。
  3. 最后 – 这里有一些有用的键码(完整列表 – 键码 – 备忘录 ):

    • 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) }