小编典典

.keyCode 与 .which

all

我以为这会在 Stack Overflow 上的某个地方得到解答,但我找不到它。

如果我正在监听按键事件,我应该使用.keyCode还是.which确定是否按下了 Enter 键?

我总是做类似以下的事情:

$("#someid").keypress(function(e) {
  if (e.keyCode === 13) {
    e.preventDefault();
    // do something
  }
});

但我看到使用.which而不是.keyCode. 有什么区别?一个比另一个更适合跨浏览器吗?


阅读 92

收藏
2022-05-26

共1个答案

小编典典

注意: 下面的答案是在 2010 年写的。多年后,这里的keyCodewhich都被弃用,赞成key(用于逻辑键)和code(用于键的物理放置)。但请注意,IE
不支持code,并且它的支持key是基于旧版本的规范,因此不太正确。在我写这篇文章时,当前基于 EdgeHTML 和 Chakra 的 Edge
都不支持code,但微软正在推出基于BlinkV8
Edge 替代品,这可能会/会。


一些浏览器使用keyCode,其他浏览器使用which.

如果你使用
jQuery,你可以可靠地使用whichjQuery标准化的东西更多在这里。

如果你不使用 jQuery,你可以这样做:

var key = 'which' in e ? e.which : e.keyCode;

或者:

var key = e.which || e.keyCode || 0;

…它处理了可能的可能性e.which0通过0在最后恢复它,使用JavaScript
的奇怪强大的||operator
)。

2022-05-26