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

时间:2011-05-24 21:10:44

标签: 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>

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

3 个答案:

答案 0 :(得分:22)

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

有些浏览器使用keyCode,其他浏览器使用charCode

使用arguments[0]来获取作为参数发送的事件对象,如果那里没有对象,则会有一个全局对象:

onkeydown="doKey(arguments[0] || window.event)"

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

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工作那就是下一步。

相关问题