Tim*_*own 77
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");
}
};
Run Code Online (Sandbox Code Playgroud)
有关完整分析,我建议Jan Wolter关于JavaScript鼠标事件的文章.
对于与键相关的事件,which
与已按下的键相关.对于keydown
和keyup
事件,这是相对简单的:它是按下键的关键代码,并返回与事件keyCode
属性相同的值.由于所有浏览器都支持该keyCode
属性,并且IE <9不支持which
,因此通常应该使用keyCode
for keydown
和keyup
events.
对于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关键事件的文章
nic*_*ckf 63
e.which
不是事件,which
是event
对象的属性,大多数人e
在事件处理程序中标记这些属性.它包含按下以触发事件的键的键代码(例如:keydown,keyup).
document.onkeypress = function(myEvent) { // doesn't have to be "e"
console.log(myEvent.which);
};
Run Code Online (Sandbox Code Playgroud)
使用该代码,控制台将打印出您在键盘上按下的任何键的代码.
此功能已从Web标准中删除.虽然有些浏览器可能仍然支持它,但它正在被删除.不要在旧项目或新项目中使用它.使用它的页面或Web应用程序可能随时中断.
KeyboardEvent.key
如果可以的话,你应该使用它.
http://codepen.io/KevinOrfas/pen/QKbKAd
在活动期间,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)