使用jQuery,我如何找到哪个键被按下时,我绑定到按键事件?

$('#searchbox input').bind('keypress', function(e) {});

我想在按下ENTER键时触发提交。

(更新)

尽管我自己找到了(或者更好的:一个)答案,但似乎还有变化的空间;)

keyCode和它之间有区别吗?特别是如果我只找ENTER,它永远不会是unicode键?

是否有些浏览器提供一种属性,而其他浏览器提供另一种?


当前回答

检查优秀的jquery。热键插件,支持键组合:

$(document).bind('keydown', 'ctrl+c', fn);

其他回答

我将用e.preventDefault();来补充解决方案代码。 在输入字段的情况下,我们不参加提交的形式进入按下

var code = (e.keyCode ? e.keyCode : e.which);
 if(code == 13) { //Enter keycode
   e.preventDefault();
   //Do something
 }
$(document).bind('keypress', function (e) {
    console.log(e.which);  //or alert(e.which);

});

你应该有firbug来查看控制台的结果

编辑:这只适用于IE…

我知道这是一个旧帖子,但有人可能会发现这很有用。

键事件是映射的,所以除了使用keycode值,还可以使用key值使其更具可读性。

$(document).ready( function() {
    $('#searchbox input').keydown(function(e)
    {
     setTimeout(function ()
     { 
       //rather than using keyup, you can use keydown to capture 
       //the input as it's being typed.
       //You may need to use a timeout in order to allow the input to be updated
     }, 5);
    }); 
    if(e.key == "Enter")
    {
       //Enter key was pressed, do stuff
    }else if(e.key == "Spacebar")
    {
       //Spacebar was pressed, do stuff
    }
});

这里是一个小抄与映射键,我从这个博客

如果你正在使用jQuery UI,你有翻译的公共键代码。在ui / ui / ui.core.js:

$.ui.keyCode = { 
    ...
    ENTER: 13, 
    ...
};

在tests/simulate/jquery. simulation . JS中也有一些翻译,但我在核心JS库中找不到任何翻译。注意,我只是核对了一下资料。也许有其他方法可以摆脱这些神奇的数字。

你也可以使用String。charCodeAt和。fromcharcode:

>>> String.charCodeAt('\r') == 13
true
>>> String.fromCharCode(13) == '\r'
true

其实这样更好:

 var code = e.keyCode || e.which;
 if(code == 13) { //Enter keycode
   //Do something
 }