【问题标题】:window.event.keyCode how to do it on Firefox? [duplicate]window.event.keyCode 在 Firefox 上怎么做? [复制]
【发布时间】:2011-09-01 07:06:06
【问题描述】:

我正在使用此代码检查 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 中也能正常工作?谢谢

【问题讨论】:

  • 这个东西对你有用,var key = event.keyCode || event.charCode;

标签: javascript


【解决方案1】:

一些浏览器有一个全局事件对象,其他的将事件对象作为参数发送给事件处理程序。 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,事件名称必须小写,否则浏览器可能会忽略它。

【讨论】:

  • 似乎这样我得到了 keydown 和 keyup 但值键总是 0 而不是相应的键码......你知道可能是什么问题吗?我在这里测试了您的代码:chusmix.com/game/beta/move.php 您可以在 keydown 上看到键码,但它始终为 0。
  • @Liso22:可能是您的页面上没有文档类型...当我在 Firefox、IE、Opera、Safari 和 Chrome 中运行此测试时,它可以工作:@987654322 @
【解决方案2】:
<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 进行了测试。

【讨论】:

    【解决方案3】:

    我也遇到过同样的问题,我相信成千上万的程序员都遇到过。

    问题是浏览器(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 工作,那就是下一个。

    【讨论】:

      猜你喜欢
      • 2012-03-11
      • 2015-11-13
      • 2017-01-12
      • 1970-01-01
      • 1970-01-01
      • 2018-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多