.keyCode与。哪个

2020/10/12 02:41 · javascript ·  · 0评论

我以为可以在Stack Overflow的某处得到答案,但我找不到。

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

我一直都做以下事情:

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

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

注:下面的答案写于2010年在这里很多年以后,无论是keyCodewhich赞成不赞成使用key(对于逻辑密钥)和code(对于关键的物理位置)。但是请注意,IE不支持code,并且它对key规范的支持是基于较旧的规范,因此不太正确。在我撰写本文时,当前基于EdgeHTML和Chakra的Edge均不支持code,但Microsoft正在为其Edge推出基于BlinkV8的替代产品,据推测可以/将要使用。


有些浏览器使用keyCode,有些使用which

如果您使用的是jQuery,则可以可靠地使用whichjQuery标准化事物这里更多。

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

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

或者:

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

......它处理的可能性,e.which可能是0(通过恢复0到了最后,使用JavaScript的好奇,强大的||运营商)。

jQuery的正常化event.which取决于是否event.whichevent.keyCode或者event.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;
}

.whichjQuery的另一个好处是jQuery也可以实现鼠标单击:

// 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 ) ));
}

如果您使用的是原始Javascript,请注意keyCode现在已弃用,将被删除:

此功能已从Web标准中删除。尽管某些浏览器可能仍支持它,但是它正在被删除。避免使用它,并尽可能更新现有代码;请参阅此页面底部的兼容性表以指导您做出决定。请注意,此功能可能在任何时间都无法使用

https://developer.mozilla.org/zh-CN/docs/Web/API/KeyboardEvent/keyCode

而是根据您想要的行为使用:.key.codehttps

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

两者均在现代浏览器上实现。

看一下这个:https : //developer.mozilla.org/en-US/docs/Web/API/event.keyCode

在keypress事件中,所按下键的Unicode值存储在keyCode或charCode属性中,而不是两者都存储。如果按下的键生成一个字符(例如“ a”),则将charCode设置为该字符的代码,同时注意字母大小写。(即charCode考虑是否按住Shift键)。否则,按下的键的代码将存储在keyCode中。keyCode始终在keydown和keyup事件中设置。在这些情况下,永远不会设置charCode。要获取密钥的代码而不管它是存储在keyCode还是charCode中,请查询which属性。通过IME输入的字符不会通过keyCode或charCode注册。

event.key目前建议MDN文档:https//developer.mozilla.org/zh-CN/docs/Web/API/KeyboardEvent/key

event.KeyCode并且event.which它们的MDN页面顶部都有讨厌的已弃用警告:
https
: //developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode https://developer.mozilla.org/en-US / docs / Web / API / KeyboardEvent /

对于字母数字键,event.key似乎在所有浏览器中都实现相同。对于控制键(制表符,输入,转义等),event.key在Chrome / FF / Safari / Opera中具有相同的值,但在IE10 / 11 / Edge中具有不同的值(IE显然使用较旧的规范版本,但彼此匹配(2018年1月14日)。

对于字母数字键,检查将类似于:

event.key === 'a'

对于控制字符,您需要执行以下操作:

event.key === 'Esc' || event.key === 'Escape'

我在这里使用示例在多个浏览器上进行测试(我必须在Codepen中打开并进行编辑以使其能够与IE10一起使用):https : //developer.mozilla.org/zh-CN/docs/Web/API/KeyboardEvent/码

event.code 在另一种答案中提到它是可能的,但是IE10 / 11 / Edge没有实现它,所以如果您要IE支持,那就来了。

强大的Javascript库,用于捕获键盘输入和输入的按键组合。它没有依赖性。

http://jaywcjlove.github.io/hotkeys/

hotkeys('ctrl+a,ctrl+b,r,f', function(event,handler){
    switch(handler.key){
        case "ctrl+a":alert('you pressed ctrl+a!');break;
        case "ctrl+b":alert('you pressed ctrl+b!');break;
        case "r":alert('you pressed r!');break;
        case "f":alert('you pressed f!');break;
    }
});

热键了解以下修饰符:shiftoptionaltctrlcontrolcommand,和

以下特殊键可用于快捷键:backspacetabclearenterreturnescescapespaceupdownleftrighthomeendpageuppagedowndeldeletef1通过f19

在Firefox中,keyCode属性在onkeypress事件上不起作用(只会返回0)。对于跨浏览器的解决方案,请结合使用which属性和keyCode,例如:

var x = event.which || event.keyCode;  // Use either which or keyCode, depending on browser support
本文地址:http://javascript.askforanswer.com/keycodeyunage.html
文章标签: ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇: 有什么作用?
下一篇:

评论已关闭!