window.event.keyCode如何在Firefox上执行此操作?

lis*_*aro 9 javascript

我正在使用此代码检查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>
Run Code Online (Sandbox Code Playgroud)

问题是,出于某种原因,它只适用于Chrome.我认为'window.event.keyCode'不会返回任何内容.我如何让它至少在Firefox中运行?谢谢

Guf*_*ffa 22

某些浏览器具有全局事件对象,其他浏览器将事件对象作为参数发送到事件处理程序.Chrome和Internet Exlporer使用前者,Firefox使用后者.

有些浏览器使用keyCode,有些则使用charCode.

用于arguments[0]获取作为参数发送的事件对象,如果没有对象,则改为使用全局对象:

onkeydown="doKey(arguments[0] || window.event)"
Run Code Online (Sandbox Code Playgroud)

在该方法中,您可以检查keyCodecharCode

function doKey(event) {
  var key = event.keyCode || event.charCode;
  ...
}
Run Code Online (Sandbox Code Playgroud)

请注意小写名称onkeydown.如果您使用的是XHTML,则事件名称必须小写,否则浏览器可能会忽略它.


sil*_*fox 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>
Run Code Online (Sandbox Code Playgroud)

如果我们event作为参数传递,大多数现代浏览器都会运行良好.我已经测试过Chrome 12,Firefox 4,IE 7/8/9.