Javascript 事件 e.which?

IT技术 javascript dom-events
2021-02-07 07:57:56

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

4个回答

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,因此您通常应该使用keyCodeforkeydownkeyupevents。

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

OP不接受这个作为答案蒂姆失望:)
2021-04-04 07:57:56
@Toskan:接受的答案是在我的几个小时前发布的,并且可能在我发布我的之前已经被接受。
2021-04-14 07:57:56

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

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

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

弃用通知(截至 2020 年 9 月)

KeyboardEvent.which已被弃用。请寻找替代方案,例如KeyboardEvent.key此处阅读完整的 API

它并不真正需要 Firebug,只需要某种 console.log(比 Firebug 提供的要多得多,例如 webkitt-ens)。
2021-03-19 07:57:56
KeyboardEvent.which已被弃用。请寻找替代方案,例如KeyboardEvent.key在此处查看更多信息
2021-03-28 07:57:56
which 也存在于鼠标事件中,并且您的示例不适用于 IE,其中事件处理程序不接收事件参数。
2021-04-08 07:57:56
对于所有发现此问题的人来说,这只是另一个帮助说明(也将发布在其他 e.which 问题上)。我在 jQuery 论坛上发表了一篇文章,其中列出了大部分 e.which 代码及其相关键。帖子在这里 -> forum.jquery.com/topic/eventwhich-code-list-just-for-help
2021-04-08 07:57:56

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

KeyboardEvent.key如果可用,您应该改用它。

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

KeyboardEvent.key将返回"key 的标识符 (char)"KeyboardEvent.which将返回"the numeric keyCode"
2021-03-27 07:57:56
2021-04-08 07:57:56

在活动期间,e

e.which

与:

e.keyCode

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

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

document.onkeypress = function(e) {
   var key = e.which || e.keyCode;
   alert(key);
}