jQuery 事件按键:按下了哪个键?

IT技术 javascript jquery events bind keypress
2021-01-15 06:07:39

使用 jQuery,如何在绑定到 keypress 事件时找出按下了哪个键?

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

我想在ENTER按下时触发提交

[更新]

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

keyCodewhich- 特别是如果我只是在寻找ENTER永远不会是 unicode 键的之间有区别吗?

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

6个回答

其实这样更好:

 var code = e.keyCode || e.which;
 if(code == 13) { //Enter keycode
   //Do something
 }
如果 ((e.keyCode || e.which) == 13) ?;)
2021-03-10 06:07:39
根据本页下方的评论,jQuery 标准化,以便每次都在事件对象上定义“哪个”。因此,检查“keyCode”应该是不必要的。
2021-04-08 06:07:39

尝试这个

$('#searchbox input').bind('keypress', function(e) {
    if(e.keyCode==13){
        // Enter pressed... do anything here...
    }
});
@VladimirPrudnikov 哦,哦,啊!啊!在那个链接上有 mac 的一切 - 人性!!!
2021-03-17 06:07:39
@VladimirPrudnikov linux 版本怎么样?
2021-03-26 06:07:39
好吧,我们也推出了一个带有 Windows 应用程序的新版本......查看snippets.me
2021-03-27 06:07:39
@Arda 我们没有 linux 版本的计划。将有一个网络应用程序和一个公共 API,因此,可能有人会创建它:)
2021-03-27 06:07:39
哈哈哈,一个没有linux计划的开发者工具。富有的!
2021-03-27 06:07:39

如果您使用的是 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
Uncaught TypeError: String.charCodeAt is not a function 我想你是想说 '\r'.charCodeAt(0) == 13
2021-03-22 06:07:39
更正它是*$.ui.keyCode.ENTER** 而不是 *$.keyCode.ENTER —— 确实像一个魅力,虽然感谢提示!
2021-04-09 06:07:39

鉴于您使用的是 jQuery,您绝对应该使用 .which。是的,不同的浏览器会设置不同的属性,但 jQuery 会将它们标准化并在每种情况下设置 .which 值。请参阅http://api.jquery.com/keydown/ 上的文档,它指出:

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

从我所看到的使用 event.which 并尝试与 $.ui.keyCode 进行比较会导致不确定的行为。特别是映射到 $.ui.keyCode.NUMPAD_ENTER 的小写 [L] 键。可爱的。
2021-03-13 06:07:39
您是否有演示此错误的重现?最好将此报告给 jQuery 的所有者,而不是尝试重新实现他们的工作。
2021-04-01 06:07:39

...这个例子阻止了表单提交(通常是捕获击键 #13 时的基本意图):

$('input#search').keypress(function(e) {
  if (e.which == '13') {
     e.preventDefault();
     doSomethingWith(this.value);
   }
});