2010-04-22 70 views
5

我在试图捕捉键盘快捷键时发现了一个问题:CTRL +箭头。如何处理Javascript中的Ctrl +箭头?

我已经处理了keydown事件。现在,当我持有CTRL键时,keydown事件被触发一次。如果我拿着一个箭头(所以现在我拿着CTRL +箭头)它不会触发另一个事件。禁止出于任何原因吗?我想我几年前在Opera中已经遇到过这个问题,并且在浏览器中有一个选项。

我的结果:

  • 控股CTRL,按箭头 - 火灾事件CTRL和箭头

  • 按CTRL 不会触发一个事件+一次箭头 - 触发一个事件,但只有密钥码为CTRL

  • 控股CTRL,按下一个字母(如小号。) - 按预期工作

  • 按CTRL +信(如小号。) - 按预期工作

(结果在Chrome和Firefox中是相同的,上面描述的行为是否为标准?)

我使用:

  • function OnKeyDown(e) { }
  • e.ctrlKey,事件

的问题是e.which属性:可能是什么问题?

回答

10

你应该检查event.ctrlKey标志是真实的,是这样的:

document.getElementById('element').onkeydown = function (e) { 
    e = e || window.event; 
    var keyCode = e.keyCode || e.which, 
     arrow = {left: 37, up: 38, right: 39, down: 40 }; 

    if (e.ctrlKey) { 
    switch (keyCode) { 
     case arrow.left: 
     //... handle Ctrl-LeftArrow 
     break; 
     //... 
    } 
    } 
}; 

检查为例here

+0

我正在检查event.ctrlKey。我写在我的问题。我试过你的代码:http://pastebin.org/168399 - 它不起作用 - 可能是我的键盘有问题。 – 2010-04-22 19:05:49

+0

我将代码发布到了pastebin,因为我不知道如何用这么长的代码来回应你的回答(评论太短,添加代码作为回答是粗鲁的,向代码中添加代码是非系统的)。 * CONFUSED * – 2010-04-22 19:08:37

+0

我在播放[这里](http://jsbin.com/ojaki3)和你发布的代码,并且如果* LeftArrow *(没有按下Ctrl)被按下,它就会正常工作,它会显示airs“gosh”,if * Ctrl * - * LeftArrow *,警报“heureka”... – CMS 2010-04-22 19:11:37