JavaScript事件e。哪个?


70

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


42
两年后,我在其他地方阅读了几页后仍无法理解此属性。然后我偶然发现了这个旧帖子并得到了它。因此,对于@Reigel,也许可以在告诉某人Google之前重新考虑。也许他们已经做到了。那不是SO的目的。
临时用户名

@Aerovistae,那个时候,搜索Google会给你类似quirksmode.org/js/events_properties.html的信息……这已经非常有用了……
Reigel 2012年

Tim Down的答案比目前接受的答案优越得多。
Toskan 2012年

4
@JuanMendes-搜索“ javascript event.which”使我成为第一个结果。您觉得这是“令人讨厌的”吗?我的意思是,听起来您希望这里的问题从未提出过/回答过。
凯文·费根

Answers:


66

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

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

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

弃用通知

不推荐使用KeyboardEvent .。请寻找替代方法,例如KeyboardEvent.key。在此处阅读完整的API 。


1
它实际上并不需要Firebug,只需要某种console.log(比Firebug提供的要多得多,例如webkitt-ens)。
npup 2010年

1
which在鼠标事件上也存在,并且您的示例在IE上不起作用,在IE中,事件处理程序不接收事件参数。
Tim Down'6

3
只是为所有发现此问题的人提供的另一条帮助说明(也将在其他问题上发表)。我在jQuery论坛上发表了一篇文章,列出了大部分e。哪个代码及其关联的键。帖子在这里-> forum.jquery.com/topic/eventwhich-code-list-just-for-help
SpYk3HH 2012年

不推荐使用KeyboardEvent .。请寻找替代方法,例如KeyboardEvent.key在这里查看更多。
crimson_king

80

which 是的财产 Event对象。在大多数浏览器中,它是为与键有关和与鼠标有关的事件定义的,但是在这两种情况下,都未在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,因此通常应将其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撰写有关JavaScript键事件的文章


5
@Toskan:接受的答案是在我发布的几个小时之前发布的,可能在我发布我的发布之前已经被接受。
蒂姆·唐

2
OP不接受Tim作为回答,让Tim失望了!:)
sohaiby

10

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

你应该用 KeyboardEvent.key如果可用,改为使用。

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


2
KeyboardEvent.key将返回“键的标识符(字符)”,KeyboardEvent.which将返回“数字keyCode”
csr-nontol


5

活动期间e

e.which

与:

e.keyCode

因此,这两个功能都允许您获取在按键,击键或击键事件期间按下的键的键码。

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

document.onkeypress = function(e) {
   var key = e.which || e.keyCode;
   alert(key);
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.