0

假设我没有使用 jQuery,并且希望与其他主流浏览器一起支持 IE8。

为了规范事件,我遵循这种模式:

document.onkeydown = function(e) {
    
    var code;
    
    if (!e) {
        var e = window.event;
    }
    
    code = e.which || e.keyCode;

    // More stuff here...
};

但是,我怀疑如果我改变了我的e.whichvse.keyCode检查的顺序,就像这样......

code = e.keyCode || e.which;

...那么我的代码在浏览器中的行为可能会有所不同。

  1. 问题:顺序重要吗?一个订单比另一个“更好”吗?
  2. 奖励:如果我只支持 IE8 及更高版本,有e.charCode关系吗?
  3. 另一个好处:我应该使用var e = window.event还是只是e = window.event
4

1 回答 1

1

1. 是的,顺序很重要。

您应该使用的顺序确实是:

code = e.which || e.keyCode;

这是因为大多数浏览器都支持e.which(当然IE<9 除外)。这样,任何支持的浏览器(IE>=9 和 FF、Chrome、Opera、Safari 等)都e.which将使用它,而那些不支持的将使用e.keyCode.

如果您将订单切换为:

code = e.keyCode || e.which;

您将获得e.keyCode几乎所有浏览器(而不是e.which),它会告诉您按下的键而不是结果字符(我怀疑这不是您想要的)。

2.不,e.charCode无所谓。

浏览器对 e.charCode 的支持充其量是参差不齐。甚至IE9 文档也声明它只是为了兼容性。大多数流行的现代浏览器返回undefined0(或 ASCII,或扩展 ASCII,如果你幸运的话,即使那样它也只是 on keypress)。

可能应该在以下位置完成对12的额外阅读:

如果您希望使用关键事件,我为您制作了一个小提琴,以便在您输入唯一的输入字段时报告事件参数的 [相关] 属性。

3. 你绝对应该使用var e = window.event;.

如果你不使用var,你实际上是在声明window.e = window.event哪个是愚蠢的。用于在您的处理程序范围内var保持e定义。

于 2013-07-05T04:31:30.787 回答