e.which
是什么功能?请举例简要说明。e.which
是什么功能?请举例简要说明。which
是Event
对象的一个属性。在大多数浏览器中,它被定义为与按键和鼠标有关的事件,但在IE(版本9之前)中两种情况下都未被定义。
对于与鼠标有关的事件,which
指定涉及的鼠标按钮。对于IE<9,相应的值可在window.event.button
中找到。为了使情况更加复杂,非IE浏览器还支持一种鼠标事件的button
属性,有时会报告与which
不同的值。此外,浏览器有时对于相同的按钮或按钮组合具有不同的值。如果您坚持在所有支持它的浏览器中使用which
和IE<9中的button
,则唯一的常数是值为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”属性关联到被按下的键。对于“keydown”和“keyup”事件,这相对简单:它是所按下按键的键码,并且返回与事件的“keyCode”属性相同的值。由于所有浏览器都支持“keyCode”属性,而IE < 9不支持“which”属性,因此您通常应该在“keydown”和“keyup”事件中使用“keyCode”属性。
对于“keypress”事件,情况更为复杂。对于可打印字符键, “which” 是按下的键的字符代码,并且在比“charCode”属性更多的浏览器中受到支持。在IE < 9中,相当于“which”的是“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按键事件的文章以获取更多详细信息。
e.which
不是一个事件,which
是event
对象的属性,大多数人在其事件处理程序中将其标记为e
。它包含触发事件(例如:keydown,keyup)时按下的键的键码。
document.onkeypress = function(myEvent) { // doesn't have to be "e"
console.log(myEvent.which);
};
which
也存在于鼠标事件中,而且你的示例在IE上不起作用,在IE中,事件处理程序不会接收事件参数。 - Tim Down这个功能已从Web标准中移除。尽管某些浏览器仍可能支持该功能,但正在逐步停用该功能。请勿在新旧项目中使用它。使用该功能的页面或Web应用程序可能随时出现问题。
如果有可用的话,应改用KeyboardEvent.key
代替。
KeyboardEvent.key
将返回键的标识符(字符),而KeyboardEvent.which
将返回数字keyCode。 - csr-nontol在一个事件中,e
:
e.which
等同于:
e.keyCode
因此,这两个函数都允许您在keypress、keydown或keyup事件期间获取按键的键码。
许多人使用||
(或)来确保其代码在不支持哪个属性的浏览器中正常工作。请查看下面的代码:
document.onkeypress = function(e) {
var key = e.which || e.keyCode;
alert(key);
}