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

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

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

(更新)

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

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

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


当前回答

鉴于您正在使用jQuery,您绝对应该使用.which。是的,不同的浏览器设置不同的属性,但jQuery会对它们进行规范化,并在每种情况下设置.which值。参见http://api.jquery.com/keydown/上的文档,它说明:

要确定按下了哪个键,可以检查传递给处理程序函数的事件对象。虽然浏览器使用不同的属性来存储这些信息,但jQuery规范化了.which属性,因此我们可以可靠地使用它来检索键代码。

其他回答

鉴于您正在使用jQuery,您绝对应该使用.which。是的,不同的浏览器设置不同的属性,但jQuery会对它们进行规范化,并在每种情况下设置.which值。参见http://api.jquery.com/keydown/上的文档,它说明:

要确定按下了哪个键,可以检查传递给处理程序函数的事件对象。虽然浏览器使用不同的属性来存储这些信息,但jQuery规范化了.which属性,因此我们可以可靠地使用它来检索键代码。

根据Kilian的回答:

如果只输入按键很重要:

<form action="javascript:alert('Enter');">
<input type=text value="press enter">
</form>

如果你正在使用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

以下是对各种浏览器行为的详细描述http://unixpapa.com/js/key.html

试试这个:

jQuery('#myInput').keypress(function(e) {
    code = e.keyCode ? e.keyCode : e.which;
    if(code.toString() == 13) {
        alert('You pressed enter!');
    }
});