【发布时间】:2013-05-27 04:34:34
【问题描述】:
我有一个看似简单的问题,但我找不到解决方案。给定以下代码:
<html>
<head>
<script type="text/javascript">
document.onkeypress = function(ev) {
if (!ev) { alert("Broken"); return; }
var key = ev.charCode || ev.keyCode;
alert(key);
}
</script>
</head>
<body>Test</body>
</html>
如果我将它保存为文件并在 IE 中加载它并按下一个键,它总是会出现“损坏”警报,而在 Firefox 中它可以正常工作(通过键码发出警报)。
如果我使用window.onkeypress 而不是文档处理程序,则在 IE 中根本不会调用它。如果我在onload 事件中附加处理程序,它没有任何区别。使用像 keydown 或 keyup 这样的事件并没有什么不同(在 IE 中仍然存在问题)。
然而,当我使用jsfiddle for the example 时,它在 IE 中运行良好。
那么:jsfiddle 与上面的代码有什么不同,如何让它在 IE 中工作?
【问题讨论】:
-
你的代码和fiddle的区别在于它将你的代码放在
window.onload中。只是说。另外,你的 DOCTYPE 呢?您应该将<!DOCTYPE html>放在最顶部作为第一行。此外,您不需要检查ev。只需使用ev = ev || window.event;作为函数的第一行(取出if行)。 -
不确定是否是问题所在,但
DOCTYPE在 IE 中尤为重要;否则 IE 会以“怪癖模式”呈现。 -
好的,就是这样,DOCTYPE 丢失了。我不敢相信 IE 会以这种不明显的微妙方式中断(尤其是因为实际代码在页面中嵌入了更多的 javascript,它们工作得很好)
-
@Ian:如果您将此作为答案发布,我会接受。
标签: javascript internet-explorer keypress