Javascript 事件,哪个?

Javascript 事件 e.which的功能是什么。

111348 次浏览

e.which不是事件,whichevent对象的属性,大多数人在他们的事件处理程序中将其标记为 e。它包含按下触发事件的键的密钥代码(例如: keydown,keyup)。

document.onkeypress = function(myEvent) { // doesn't have to be "e"
console.log(myEvent.which);
};

有了这些代码,控制台将打印出你在键盘上按下的任何键的代码。

弃用通知书(截至2020年9月)

KeyboardEvent.which 已被弃用。请寻找替代方案,如 键盘事件,键。阅读完整的 API 给你

whichEvent对象的属性。它是为大多数浏览器中的键相关和鼠标相关事件定义的,但是在这两种情况下 IE (版本9之前)都没有定义。

对于与鼠标相关的事件,which指定所涉及的鼠标按钮。对于 IE < 9,在 window.event.button中找到等效值。更复杂的是,非 IE 浏览器还支持鼠标事件的 button属性,该属性有时会报告与 which不同的值。此外,浏览器有时对同一个按钮或按钮组合有不同的值。如果您坚持在所有支持 which的浏览器中使用 which,在 IE < 9中使用 button,那么一个常量是值1总是意味着涉及到鼠标左键(尽管不一定单独使用)。

document.onmousedown = function(e) {
e = e || window.event;
var button = (typeof e.which != "undefined") ? e.which : e.button;
if (button == 1) {
alert("Left mouse button down");
}
};

对于一个完整的分析,我推荐 Jan Wolter 关于 JavaScript 鼠标事件的文章

对于与键相关的事件,which与按下的键相关。对于 keydownkeyup事件,这相对简单: 它是按下的键的键代码,并返回与事件的 keyCode属性相同的值。由于所有浏览器都支持 keyCode属性,而 IE < 9不支持 which,因此通常应该对 keydownkeyup事件使用 keyCode

对于 keypress事件,情况更为复杂。对于可打印的字符键,which是按下的键的字符代码,并且在比 charCode属性更多的浏览器中受支持。在 IE < 9中,同样等价的是 keyCode属性。因此,为了检测类型化的字符,下面是一种跨浏览器的方法。请注意,下面的代码不应该用于非打印键,如箭头键,而是应该在 keydown事件中检测:

document.onkeypress = function(e) {
e = e || window.event;
var charCode = (typeof e.which == "number") ? e.which : e.keyCode;
if (charCode) {
alert("Character typed: " + String.fromCharCode(charCode));
}
};

同样,对于更多的细节,我推荐 Jan Wolter 关于 JavaScript 关键事件的文章

此特性已从 Web 标准中删除。虽然一些浏览器可能仍然支持它,但它正在被放弃的过程中。不要在旧的或新的项目中使用它。使用它的页面或 Web 应用程序可能随时中断。

如果可用的话,应该使用 KeyboardEvent.key

Http://codepen.io/kevinorfas/pen/qkbkad

在活动期间,e:

e.which

等同于:

e.keyCode

因此,这两个函数都允许您获取在按键、按下键或按上键事件期间按下的键的键码

许多人使用 ||(OR)来确保他们的代码在不支持哪个属性的浏览器中工作。看看下面的代码:

document.onkeypress = function(e) {
var key = e.which || e.keyCode;
alert(key);
}