我以为这个问题会在Stack Overflow上的某个地方得到回答,但我找不到了。
如果我正在侦听一个按键事件,我应该使用.keyCode还是.which来确定是否按下了Enter键?
我一直都是这样做的:
$("#someid").keypress(function(e) {
if (e.keyCode === 13) {
e.preventDefault();
// do something
}
});但是我看到了一些使用.which而不是.keyCode的例子。有什么关系呢?一个比另一个更适合跨浏览器吗?
发布于 2010-12-17 22:54:15
注意:下面的答案是在2010年写的。许多年后,keyCode和which都被弃用,取而代之的是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 things;More here.
如果你没有使用jQuery,你可以这样做:
var key = 'which' in e ? e.which : e.keyCode;或者:
var key = e.which || e.keyCode || 0;...which处理e.which可能为0的可能性(通过在末尾使用JavaScript's curiously-powerful || operator恢复该0 )。
发布于 2010-12-17 22:59:32
jQuery根据浏览器支持的是event.which、event.keyCode还是event.charCode来标准化event.which:
// 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对鼠标点击也是这样做的:
// 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 ) ));
}发布于 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
两者都是在现代浏览器上实现的。
https://stackoverflow.com/questions/4471582
复制相似问题