javascript事件e.which?

min*_*nil 66 javascript javascript-events

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

Tim*_*own 77

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

对于与鼠标相关的事件,请which指定所涉及的鼠标按钮.对于IE <9,可以找到等效值window.event.button.只是为了使事情变得复杂,非IE浏览器也支持button鼠标事件的属性,有时会报告不同的值which.此外,浏览器有时对同一按钮或按钮组合具有不同的值.如果你坚持which在支持它的所有浏览器和buttonIE <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");
    }
};
Run Code Online (Sandbox Code Playgroud)

有关完整分析,我建议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));
    }
};
Run Code Online (Sandbox Code Playgroud)

同样,有关更多详细信息,我推荐Jan Wolter关于JavaScript关键事件的文章

  • @Toskan:接受的答案是在我发布前几个小时发布的,在我发布之前可能已被接受. (5认同)
  • 我不明白为什么这不是公认的答案?! (2认同)
  • OP让_Tim down_不接受这个作为答案!:) (2认同)

nic*_*ckf 63

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

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

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

  • 对于所有发现这一点的人来说,这只是另一个帮助记录(也会在其他问题上发布.)我在jQuery论坛上发帖,列出了大部分电子邮件及其相关密钥.帖子在这里 - > http://forum.jquery.com/topic/eventwhich-code-list-just-for-help (3认同)

Kev*_*fas 7

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

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

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

  • `KeyboardEvent.key` 将返回 **“键的标识符(字符)”**,而 `KeyboardEvent.which` 将返回 **“数字键代码”**。 (2认同)

Say*_*Das 6

在活动期间,e

e.which
Run Code Online (Sandbox Code Playgroud)

与:

e.keyCode
Run Code Online (Sandbox Code Playgroud)

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

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

document.onkeypress = function(e) {
   var key = e.which || e.keyCode;
   alert(key);
}
Run Code Online (Sandbox Code Playgroud)