假设我没有使用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;
...然后我的代码可能在浏览器中采取不同的行为。
答案 0 :(得分:1)
<强> 1。是的,订单很重要。
您应该使用的订单确实是:
code = e.which || e.keyCode;
这是因为大多数浏览器都支持e.which
(IE<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也指出它只是为了兼容性。大多数流行的现代浏览器返回0
或keypress
(或ASCII,或扩展ASCII,如果你很幸运,即使那时它只在var e = window.event;
上)。
1 和 2 的附加读数应该可以在以下位置完成:
如果您希望在键入唯一输入字段时使用关键事件I made a fiddle for you来报告事件参数的[相关]属性。
第3。你绝对应该使用var
。
如果您不使用window.e = window.event
,则有效地声明var
这是愚蠢的。使用e
将{{1}}定义在处理程序的范围内。