是否应该在e.keyCode之前检查,反之亦然?

时间:2013-07-04 21:13:10

标签: javascript javascript-events keycode

假设我没有使用jQuery,并希望支持IE8以及其他主流浏览器。

为了规范化事件,我遵循以下模式:

document.onkeydown = function(e) {

    var code;

    if (!e) {
        var e = window.event;
    }

    code = e.which || e.keyCode;

    // More stuff here...
};

然而,我怀疑如果我改变了我的e.which与e.keyCode检查的顺序,就像这样......

code = e.keyCode || e.which;

...然后我的代码可能在浏览器中采取不同的行为。

  1. 问题:订单是否重要?一个订单“比”更好“ 其他
  2. 奖励:如果我只支持IE8及以上版本,e.charCode是否重要?
  3. 另一个好处:我应该使用“var e = window.event”还是只使用“e = window.event“?

1 个答案:

答案 0 :(得分:1)

<强> 1。是的,订单很重要。

您应该使用的订单确实是:

code = e.which || e.keyCode;

这是因为大多数浏览器都支持e.whichIE<9 excluded)。这样,支持e.which的任何浏览器(IE&gt; = 9和FF,Chrome,Opera,Safari等)都将使用它,而那些不支持e.keyCode的浏览器将使用code = e.keyCode || e.which;

您应该将订单切换为:

e.keyCode

几乎每个浏览器(而不是e.which)都会得到undefined,它会告诉你按下的键但不是结果字符(我怀疑它不是你想要的)。

<强> 2。不,e.charCode没关系。

e.charCode is spotty at best的浏览器支持。甚至IE9 documentation也指出它只是为了兼容性。大多数流行的现代浏览器返回0keypress(或ASCII,或扩展ASCII,如果你很幸运,即使那时它只在var e = window.event;上)。

1 2 的附加读数应该可以在以下位置完成:

如果您希望在键入唯一输入字段时使用关键事件I made a fiddle for you来报告事件参数的[相关]属性。

第3。你绝对应该使用var

如果您不使用window.e = window.event,则有效地声明var这是愚蠢的。使用e将{{1}}定义在处理程序的范围内。