使用 jQuery,如何在绑定到 keypress 事件时找出按下了哪个键?
$('#searchbox input').bind('keypress', function(e) {});
我想在ENTER按下时触发提交。
[更新]
尽管我自己找到了(或更好的:一个)答案,但似乎仍有一些变化空间;)
keyCode
和which
- 特别是如果我只是在寻找ENTER永远不会是 unicode 键的和之间有区别吗?
某些浏览器是否提供一种属性而其他浏览器提供另一种属性?
使用 jQuery,如何在绑定到 keypress 事件时找出按下了哪个键?
$('#searchbox input').bind('keypress', function(e) {});
我想在ENTER按下时触发提交。
[更新]
尽管我自己找到了(或更好的:一个)答案,但似乎仍有一些变化空间;)
keyCode
和which
- 特别是如果我只是在寻找ENTER永远不会是 unicode 键的和之间有区别吗?
某些浏览器是否提供一种属性而其他浏览器提供另一种属性?
其实这样更好:
var code = e.keyCode || e.which;
if(code == 13) { //Enter keycode
//Do something
}
尝试这个
$('#searchbox input').bind('keypress', function(e) {
if(e.keyCode==13){
// Enter pressed... do anything here...
}
});
如果您使用的是 jQuery UI,则您有常用键代码的翻译。在ui/ui/ui.core.js 中:
$.ui.keyCode = {
...
ENTER: 13,
...
};
在 tests/simulate/jquery.simulate.js 中也有一些翻译,但我在核心 JS 库中找不到任何翻译。请注意,我只是搜索了来源。也许还有其他方法可以摆脱这些神奇的数字。
您还可以使用 String.charCodeAt 和 .fromCharCode:
>>> String.charCodeAt('\r') == 13
true
>>> String.fromCharCode(13) == '\r'
true
鉴于您使用的是 jQuery,您绝对应该使用 .which。是的,不同的浏览器会设置不同的属性,但 jQuery 会将它们标准化并在每种情况下设置 .which 值。请参阅http://api.jquery.com/keydown/ 上的文档,它指出:
为了确定按下了哪个键,我们可以检查传递给处理函数的事件对象。虽然浏览器使用不同的属性来存储这些信息,但 jQuery 规范了 .which 属性,因此我们可以可靠地使用它来检索关键代码。
...这个例子阻止了表单提交(通常是捕获击键 #13 时的基本意图):
$('input#search').keypress(function(e) {
if (e.which == '13') {
e.preventDefault();
doSomethingWith(this.value);
}
});