.keyCode vs. .that

2022-08-30 00:37:36

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

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

我总是做这样的事情:

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

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


答案 1

注意:下面的答案写于2010年。在这里,许多年后,keyCode哪些都被弃用,取而代之的是 key(用于逻辑密钥)和代码(用于密钥的物理放置)。但请注意,IE 不支持 ,并且它对 的支持基于规范的旧版本,因此不太正确。在我写这篇文章的时候,目前基于EdgeHTML和Chakra的Edge也不支持,但微软正在推出基于BlinkV8的Edge替代品,大概会这样做。codekeycode


有些浏览器使用,有些使用 。keyCodewhich

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

如果您没有使用jQuery,则可以执行以下操作:

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

或者:

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

...它处理了可能存在的可能性(通过在最后恢复它,使用JavaScript奇怪的强大||运算符)。e.which00


答案 2

jQuery 规范化取决于浏览器是否支持 或:event.whichevent.whichevent.keyCodeevent.charCode

// Add which for key events
if ( event.which == null && (event.charCode != null || event.keyCode != null) ) {
   event.which = event.charCode != null ? event.charCode : event.keyCode;
}

另一个好处是jQuery也为鼠标点击做了这件事:.which

// Add which for click: 1 === left; 2 === middle; 3 === right
// Note: button is not normalized, so don't use it
if ( !event.which && event.button !== undefined ) {
    event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
}