我正在使用2个函数来检测按下的键是否与我想要的匹配,如果是,请执行某些操作。它就像Chrome中的魅力一样,但两种功能都不适用于Firefox。有没有办法可以让它在那里工作?
document.onkeypress = function() {
if (event.charCode == 49) {
alert("You pressed 1!");
}
if (event.charCode == 50) {
alert("You pressed 2!");
}
if (event.charCode == 51) {
alert("You pressed 3!");
}
if (event.charCode == 52) {
alert("You pressed 4!");
}
}
document.onkeydown = function() {
if (event.keyCode == 122) {
alert("You pressed F11!");
}
}
<span>Press 1, 2, 3, 4 and F11 to launch different events.</span>
答案 0 :(得分:3)
该代码中的主要问题是您依赖于全局event
对象,该对象未在DOM事件规范中指定,并且是Chrome决定支持的特定于Microsoft的内容。
在符合标准的浏览器上,使用addEventListener
并接受事件对象作为参数:
document.addEventListener("keypress", function(e) {
// ....
}, false);
如果您需要支持IE8及更早版本(或者IE9 +处于破坏的“兼容性”模式),则需要attachEvent
,希望您使用全局event
对象:
document.attachEvent("onkeypress", function() {
// ....
});
所以:
function handler(e) {
e = e || window.event;
// ...
}
if (document.addEventListener) {
document.addEventListener("keypress", handler, false);
} else {
document.attachEvent("onkeypress", handler);
}
第二个问题是charCode
已被弃用; according to MDN,您应该使用which
表示数值,或者(对于可打印字符)char
表示(单字符)字符串。对于旧浏览器,您可能会回归charCode
或keyCode
。
我还会使用switch
。
所以:
function handler(e) {
e = e || window.event;
switch (e.which || e.charCode || e.keyCode) {
case 49:
snippet.log("You pressed 1");
break;
case 50:
snippet.log("You pressed 2");
break;
case 51:
snippet.log("You pressed 3");
break;
case 52:
snippet.log("You pressed 4");
break;
}
}
if (document.addEventListener) {
document.addEventListener("keypress", handler, false);
} else {
document.attachEvent("onkeypress", handler);
}
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="//tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
答案 1 :(得分:2)
您忘记声明event
参数。 Perhaprs Chrome会自动执行此操作。
这适用于两个浏览器 -
document.onkeypress = function(event) {
if (event.charCode == 49) {
alert("You pressed 1!");
}
if (event.charCode == 50) {
alert("You pressed 2!");
}
if (event.charCode == 51) {
alert("You pressed 3!");
}
if (event.charCode == 52) {
alert("You pressed 4!");
}
}
document.onkeydown = function(event) {
if (event.keyCode == 122) {
alert("You pressed F11!");
}
}