keydown 在 Firefox 中不起作用

Posted

技术标签:

【中文标题】keydown 在 Firefox 中不起作用【英文标题】:keydown not working in firefox 【发布时间】:2012-02-27 16:37:46 【问题描述】:
 <script>
        function MoveNext(e, obj) 

            if (!e) var e = window.event;

            if (e.keyCode) code = e.keyCode;

            else if (e.which) code = e.which;
            if (code == 13) 

                document.getElementById(obj).focus();

                return false;
            
   </script>

上面的代码在 IE 中运行,但在 mozilla 中不运行,为什么

【问题讨论】:

您能否提供更多参与“工作”的代码。例如,如何调用它会影响它是否有效。 你希望它做什么?它实际上是做什么的?您收到错误消息吗?您是否能够缩小问题出在函数体中还是在调用方式上,例如,通过用单个 alert("Test") 语句替换函数体? 【参考方案1】:

改变

if (e.keyCode) code = e.keyCode;
else if (e.which) code = e.which;

code = (e.keyCode)? e.keyCode: e.charCode;

并确保在调用它时将事件传递给 moveNext,因为只有当您从函数显式发送事件时,Firefox 才会识别事件。

此外,如果您正在执行 keydown 的对象是一个 div,则向其添加一个 0 的 tabindex,以便它可以检索焦点。

<div id="mydiv" tabindex="0"></div>

【讨论】:

甚至进一步简化为code = e.keyCode || e.charCode;【参考方案2】:

返回键的最佳代码取决于您正在收听的键盘事件(keydown、keyup、keypress)。对于按键,您可以这样做:

function MoveNext(e, obj) 
    e = e || window.event;
    var code = e.which || e.keyCode;
    if (code == 13) 
        document.getElementById(obj).focus();
    

注意:我已删除您的局部变量 e,因此它不会与参数 e 混淆,并且我已将 code 定义为局部变量,您将其作为隐式全局变量(从不一件好事)。

更多关于跨浏览器密钥处理的信息在这里描述:keycode and charcode。

【讨论】:

我理解一般意义上的提升,但是你确定包含var e会覆盖参数e吗?我没有在自己的代码中这样做,但我有一个想法,即尝试重新声明已在当前范围内定义的变量将被忽略,即额外的 var 将被忽略。 @nnnnnn - 是的,我非常确定。局部变量定义覆盖同名参数的方式与局部变量覆盖更高范围(包括全局变量)中任何同名变量的方式相同。请参阅此工作演示:jsfiddle.net/jfriend00/LSSK9。 感谢演示,但要澄清我想问的问题:如果你有一个函数参数 e 后跟 var e (不分配新值)应该导致 @987654333 @ 具有值 undefined 由于您的答案中显示的可变提升行为?我试过这个:jsfiddle.net/LSSK9/1 在 IE 和 FF 中,参数没有改变,所以警报说“foo”。 if (!x) var x = 7; 也最终提醒“foo”。 @nnnnnn - 我明白你现在在问什么。这是一个更棘手的案例,我不确定。我不确定它在所有浏览器中是如何工作的。我当然建议不要那样做,因为编程的愿望充其量是模棱两可的。我已经编辑了我的答案。 是的,我当然不会推荐它或自己做——即使我确信它在所有浏览器中都有效,但它仍然会误导阅读。我确实使用了类似于问题中的 if 语句的代码,除了 without 有问题的var,即if (!e) e = window.event;

以上是关于keydown 在 Firefox 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Javascript autotab keyup/keydown 在 Cordova Android 浏览器中不起作用

为啥我的动画在 Firefox 中不起作用?

为啥动画内容在 Firefox 中不起作用?

按钮:悬停在 Firefox 中不起作用

calc() 在 Firefox 中不起作用

为啥 Jquery 加载在 Firefox 中不起作用?