在 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
侦听器取消浏览器的响应操作(即滚动)。
我有一个项目,其中箭头键可以用作输入方法,在大多数浏览器中只需使用 .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
侦听器取消浏览器的响应操作(即滚动)。