在 Firefox 中禁用箭头键页面滚动

Disable arrow key page scrolling in Firefox

我有一个项目,其中箭头键可以用作输入方法,在大多数浏览器中只需使用 .preventDefault() 就可以完美地工作,但是 Firefox(Win8 和 OSX 上的 v37)仍然似乎移动了浏览器 window(如果有可用的屏幕外滚动区域)

$(document).keyup(function (evt) {
    if (evt.keyCode == 39 || evt.keyCode == 40) { // Right arrow, Down arrow
        evt.preventDefault();
        // Actual code
    } else { 
        if (evt.keyCode == 37 || evt.keyCode == 38) { // Left arrow, Up arrow
            evt.preventDefault();
            // Actual code
        }
    }
})

我看到了一些关于使用 charCode 的事情,但是我的代码确实 运行 所以 .preventDefault() 被挑衅地击中了。

据我所知,没有理由移动 window 位置。

我是不是做错了什么?或者,如果没有,是否有另一种方法可以禁用 window 由于箭头键而移动?

你必须监听 keydown 事件而不是 keyup 因为前者总是先于后者发生。这意味着浏览器可能会在 keydown 事件发生之前 响应 keyup 事件。在这种情况下,您无法再从 keyup 侦听器取消浏览器的响应操作(即滚动)。