2010-11-13 38 views
9

我目前使用此Javascript kepypress码射击在按键事件:绑定多个要点按键事件

$(document).keydown(function(e) { 
    switch(e.keyCode) { 

    case 39: 
     e.preventDefault(); 
     alert("Arrow Key"); 
     break; 

    case 37: 
     e.preventDefault(); 
     alert("Arrow Key"); 
    } 
}); 

但我想知道是,如果我可以代替结合一个键绑定两个键的组合。我可能做这样的事情:

$(document).keydown(function(e) { 
    switch(e.keyCode) { 
     case 39 && 37: 
      e.preventDefault(); 
      alert("Arrow Key"); 
     break; 
    } 
}); 
+0

你的意思是按它们在同一时间?然后你可以看看http://stackoverflow.com/questions/1652210/can-i-intercept-control-a-keypresses-on-ie。 – 2010-11-13 16:40:14

回答

24

如果您要检查一次,你应该只使用一个常规键和一个或多个组合键(ALT /移位/ CTRL),你不能保证两个常规键可以一次实际被压在多个键用户的键盘(实际上,他们总是可以按下,但PC可能由于键盘接线方式而不理解)。

可以使用e.altKey,e.ctrlKey,e.shiftKey领域,以检查是否已按下匹配修饰键。

例子:

$(document).keydown(function(e) { 
    if(e.which == 98 && e.ctrlKey) { 
     // ctrl+b pressed 
    } 
}); 
+0

谢谢,我真的很感谢你的帮助。是的,这实际上是我所寻找的更多。再次感谢。 – mcbeav 2010-11-15 03:55:27

+0

完美,完美,完美 - 正是我今天早上寻找的! – SchweizerSchoggi 2015-02-02 10:33:32

3

为什么不使用if而非switch

$(document).keydown(function(e) { 
    if ((e.keyCode === 37) || (e.keyCode === 39)) { 
     e.preventDefault(); 
     alert("Arrow Key"); 
    } 
}); 
+0

是啊,这是不行的,我不知道为什么我更愿意使用一个开关,但我想这其实并不重要。再次感谢您的帮助。非常感激。 – mcbeav 2010-11-14 05:06:53

+0

我知道这并不”有什么做这个职位,但如果你看到这一点,也许你可以帮我的jQuery插件LazyLoad如果你有时间吗? – mcbeav 2010-11-14 05:07:56

+0

只是好奇,怎么会是你接受的答案与你的陈述,而“我在寻找的东西会为按键的组合工作。任何想法?”在另一个评论? – ThiefMaster 2010-11-14 15:38:04

3

可以使用的情况下通:

$(document).keydown(function(e) { 
    switch(e.which) { 
     case 39: 
     case 37: 
      e.preventDefault(); 
      alert("Arrow Key"); 
      break; 
    } 
}); 

请注意,我用的e.which代替e.keyCode使它在所有的浏览器(jQuery的自动分配实际上包含关键代码属性到e.which)。

+1

不。对于'keydown'事件,'keyCode'是所有浏览器中的正确属性。也许你正在考虑'按键事件? – 2010-11-13 17:45:47

+0

我将要测试这一点,只是可以肯定,这是要火上按两个键,一个组合的,对不对? – mcbeav 2010-11-14 03:29:11

+0

不,此代码不适用于'组合',这是'其中一个人被按下'的情况。 – 2010-11-14 04:16:30