首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.keyCode与.which

.keyCode与.which
EN

Stack Overflow用户
提问于 2010-12-17 22:47:01
回答 7查看 113.7K关注 0票数 243

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

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

我一直都是这样做的:

代码语言:javascript
复制
$("#someid").keypress(function(e) {
  if (e.keyCode === 13) {
    e.preventDefault();
    // do something
  }
});

但是我看到了一些使用.which而不是.keyCode的例子。有什么关系呢?一个比另一个更适合跨浏览器吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-12-17 22:54:15

注意:下面的答案是在2010年写的。许多年后,keyCodewhich都被弃用,取而代之的是key (用于逻辑键)和code (用于键的物理位置)。但请注意,IE不支持code,而且它对key的支持是基于该规范的旧版本,因此并不十分正确。在我写这篇文章的时候,目前基于EdgeHTML和Chakra的边缘也不支持code,但微软正在推出它的Blink(https://en.wikipedia.org/wiki/Blink_(browser_engine%29)-和基于V8的边缘)替代边缘,这可能会/将会。

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

如果您使用的是jQuery,则可以可靠地将which用作jQuery standardizes thingsMore here.

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

代码语言:javascript
复制
var key = 'which' in e ? e.which : e.keyCode;

或者:

代码语言:javascript
复制
var key = e.which || e.keyCode || 0;

...which处理e.which可能为0的可能性(通过在末尾使用JavaScript's curiously-powerful || operator恢复该0 )。

票数 225
EN

Stack Overflow用户

发布于 2010-12-17 22:59:32

jQuery根据浏览器支持的是event.whichevent.keyCode还是event.charCode来标准化event.which

代码语言:javascript
复制
// Add which for key events
if ( event.which == null && (event.charCode != null || event.keyCode != null) ) {
   event.which = event.charCode != null ? event.charCode : event.keyCode;
}

.which的另一个好处是jQuery对鼠标点击也是这样做的:

代码语言:javascript
复制
// 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 ) ));
}
票数 33
EN

Stack Overflow用户

发布于 2017-04-15 03:49:39

如果你还在使用普通的Javascript,请注意keyCode现在已被弃用,并将被删除:

此功能已从网络标准中删除。尽管一些浏览器可能仍然支持它,但它正在被删除。避免使用它,如果可能,更新现有代码;请参阅本页底部的兼容性表,以指导您的决定。请注意,此功能可能随时停止工作

https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode

取而代之的是:.key.code,具体取决于您想要的行为:https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key

两者都是在现代浏览器上实现的。

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4471582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档