JavaScript事件e.which?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (326)

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

提问于
用户回答回答于

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

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

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

用户回答回答于

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

对于与鼠标有关的事件,which指定涉及的鼠标按钮。对于IE <9,可以找到相应的值window.event.button。只是为了使事情复杂化,非IE浏览器也支持button鼠标事件的属性,有时会报告不同的值which。而且,浏览器有时对于同一按钮或按钮组合具有不同的值。如果你坚持which在所有支持它的浏览器中使用,并且button在IE <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关于JavaScript鼠标事件的文章

对于与键相关的事件,which涉及被按下的键。对于keydownkeyup事件,这是比较简单的:它是按关键中的关键代码,并返回相同的值作为事件的keyCode属性。由于所有浏览器都支持该keyCode属性,而IE <9不支持which,所以通常应该使用keyCodefor keydownkeyupevents。

对于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关键事件的文章

扫码关注云+社区