javascript事件e.which?

时间:2010-06-16 05:50:39

标签: javascript javascript-events

javascript事件e.which的功能是什么?请举例说明。

4 个答案:

答案 0 :(得分:75)

whichEvent个对象的属性。它在大多数浏览器中针对与键相关且与鼠标相关的事件进行了定义,但在两种情况下都没有在IE中定义(在版本9之前)。

对于与鼠标相关的事件,which指定所涉及的鼠标按钮。对于IE<在图9中,等价值在window.event.button中找到。只是为了使事情变得复杂,非IE浏览器还支持鼠标事件的button属性,有时会报告与which不同的值。此外,浏览器有时对同一按钮或按钮组合具有不同的值。如果您坚持在支持它的所有浏览器中使用which并在IE中使用button< 9,一个常量是值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's article on JavaScript mouse events

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

对于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's article on JavaScript key events

答案 1 :(得分:62)

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

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

使用该代码,控制台将打印出您在键盘上按下的任何键的代码。

答案 2 :(得分:6)

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

如果可以,请使用KeyboardEvent.key

http://codepen.io/KevinOrfas/pen/QKbKAd

答案 3 :(得分:3)

在活动期间,e

e.which

与:

相同
e.keyCode

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

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

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