我正在使用此代码检查keydown并在键关闭时显示字符串'Pressed'。
<body onKeyDown="doKey(window.event.keyCode)" onKeyUp="doKey2(window.event.keyCode)">
<script>
function doKey($key) {
document.getElementById('keydown').innerHTML='Pressed';
}
function doKey2($key) {
document.getElementById('keydown').innerHTML='';
}
</script>
<div id="keydown"></div>
问题在于,由于某些原因,它只适用于Chrome。我认为'window.event.keyCode'不会返回任何内容。我如何让它至少在Firefox中运行?感谢
答案 0 :(得分:22)
某些浏览器具有全局事件对象,其他浏览器将事件对象作为参数发送到事件处理程序。 Chrome和Internet Exlporer使用前者,Firefox使用后者。
有些浏览器使用keyCode
,其他浏览器使用charCode
。
使用arguments[0]
来获取作为参数发送的事件对象,如果那里没有对象,则会有一个全局对象:
onkeydown="doKey(arguments[0] || window.event)"
在该方法中,您可以检查keyCode
或charCode
function doKey(event) {
var key = event.keyCode || event.charCode;
...
}
请注意小写名称onkeydown
。如果您使用的是XHTML,则事件名称必须小写,否则浏览器可能会忽略它。
答案 1 :(得分:14)
<html>
<body onKeyDown="doKey(event)" onKeyUp="doKey2(event)">
<script>
function doKey(e) {
evt = e || window.event; // compliant with ie6
document.getElementById('keydown').innerHTML = evt.keyCode+' Pressed';
}
function doKey2(e) {
document.getElementById('keydown').innerHTML='';
}
</script>
<div id="keydown"></div>
</body>
</html>
如果我们将event
作为参数传递,那么大多数现代浏览器都能正常运行。我已经测试过Chrome 12,Firefox 4,IE 7/8/9。
答案 2 :(得分:0)
我遇到了同样的问题,因为我确信有成千上万的程序员。
问题是浏览器(IE除外)不喜欢window.event。
我正在试图找到一个解决方案(这是我偶然发现的),我发现了以下内容(到目前为止):
1)编写JQuery:
$(document).keyup(function(e) {
var GetKey = e.keyCode;
`enter code here`
}
});
2)重新定义关键变量:
var key = (window.event) ? evt.keyCode : evt.which;
我尝试了JQuery解决方案。它似乎在FF中没问题,但我遇到了IE中一个意想不到的错误,我仍然试图解决它。我还没有尝试过第二种解决方案;如果我不能让JQuery工作那就是下一步。