Javascript e.keyCode之前是否应检查e.keyCode,反之亦然?
假设我没有使用jQuery,并且希望支持IE8和其他主流浏览器 为了规范化事件,我遵循以下模式:Javascript e.keyCode之前是否应检查e.keyCode,反之亦然?,javascript,dom-events,keycode,Javascript,Dom 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.whichvse.
document.onkeydown = function(e) {
var code;
if (!e) {
var e = window.event;
}
code = e.which || e.keyCode;
// More stuff here...
};
但是,我怀疑如果我更改了e.which
vse.keyCode
检查的顺序,就像这样
code = e.keyCode || e.which;
…那么我的代码在不同浏览器中的行为可能会有所不同
e.charCode
是否重要var e=window.event
还是只使用e=window.event
1。是的,顺序很重要。 您应该使用的顺序确实是:
code = e.which || e.keyCode;
这是因为大多数浏览器支持e.which
(.甚至声明它只是为了兼容性。大多数流行的现代浏览器返回未定义的或0
(或者ASCII,或者扩展的ASCII,如果你幸运的话,即使如此,也只在按键上)
1和2的附加读数可能应在以下位置进行:
如果您希望处理关键事件,请在键入唯一输入字段时报告事件参数的[相关]属性
3.您应该明确使用var e=window.event;
如果你不使用var
,你实际上是在声明window.e=window.event
,这很愚蠢。使用var
在你的处理程序的范围内保持e
的定义。那么code=e.which | e.keyCode
呢?谢谢你的建议。我将继续使用这种风格。对于哪些浏览器是“which”使用了不支持“keyCode”的吗?@dandavis我不确定,尽管搜索了一下,我还是没能弄清楚。你是说e.keyCode“第一位的”因此,任何支持e的浏览器都必须支持e.keyCode吗?@Jackson:不,我是说我从来没有使用过它。我认为只有netscape需要它,而且我已经有一段时间没有瞄准netscape了……感谢你给出明确的答案!quirksmode链接似乎有点过时,但小提琴很棒;我会把它保留在书签中。
code = e.keyCode || e.which;