如何判断事件是否来自右Ctrl键?

时间:2011-01-04 05:22:40

标签: javascript

我在Javascript中有一个事件监听器,我可以判断一个关键事件是否为Ctrl (e.keyCode == 17),但是我怎么知道这个Ctrl来自右边的还是左边的?

6 个答案:

答案 0 :(得分:6)

快速说明:我不会将架构/设计建立在正确控制键的可用性基础上 - 许多笔记本电脑键盘可能没有两个控制键。

答案 1 :(得分:3)

我认为keyCode不同。

您可以使用e.ctrlKey更好地确定是否按下了控制键。

似乎是Flash can not tell which one is pressed(无论是那个还是编码不正确)。

答案 2 :(得分:1)

MSIE在大多数活动中提供ctrlLeft属性。属性值为:

    如果在活动期间按下了左键,则
  • true
  • 如果没有按下左键,则
  • false

您可以合并event.ctrlKeyevent.ctrlLeft以确定是否按下了右Ctrl键:

if (event.ctrlKey) {
    if (event.ctrlLeft) {
        // left Ctrl key pressed
    } else {
        // right Ctrl key pressed
    }
} else {
    // no Ctrl key pressed
}

请注意,ctrlLeft中的keyup属性未定义,因为不再按下Ctrl键。

在MSIE7和MSIE9下测试。在Firefox下无效。

有关详细信息,请参阅http://help.dottoro.com/ljqlvhuf.php

答案 3 :(得分:1)

如果您追踪它,您会发现两者都使用相同的密钥(17)..我认为不可能区分

答案 4 :(得分:1)

我不知道在问到这个问题时它是否可用,但你可以区分左右控制,以及alt和shift。您现在可以使用KeyboardEvent.DOM_KEY_LOCATION_ *属性进行区分。

请参阅Can javascript tell the difference between left and right shift key?

请注意,我发现Chrome似乎在实施方面存在缺陷。见How can I distinguish left- and right- shift, ctrl, and alt keys onkeyup in Chrome with Javascript

答案 5 :(得分:1)

左ctrl键有event.location属性,右边一个2有1,你可以查看canIuse上的浏览器支持

if (e.which == 17) {
   if (event.location == 1) {
      // left ctrl key
   } else if (event.location == 2) {
      // right ctrl key
   }
}