0

我正在制作一个用户必须能够输入的页面。退格的默认功能是返回一个页面,但是我需要防止这种情况并为其分配我自己的功能。

问题实际上是防止退格。我可以捕捉它,但我无法阻止它。我正在使用 3 级事件侦听器。event.preventDefault()对我不起作用,也没有返回错误。

我也试过这个:

function onunload(e) {
    if (e.keyCode == 37) return false;
    return true;
}

<body onunload="return false;">

但是第一个基本上可以

return confirm("false");

第二个什么都不做?

4

3 回答 3

0

AFAIR,可以通过keypress仅在 Firefox 中返回 false 来阻止默认的浏览器快捷操作(我测试的最后一个版本是 3.x)。

beforeunload并且unload是特定的事件和字符串应该在它们的处理程序中返回。出于安全原因,浏览器可能仅显示带有提供消息(该字符串)的确认对话框。此外,自 4 版以来的 Firefox 甚至会忽略该字符串并始终显示标准消息。

没有办法静默阻止用户离开页面。

顺便说一句,退格键在 Ubuntu 中不能用作 history.back() 。

于 2012-04-10T08:04:29.733 回答
0

在关卡上使用keydown处理程序document

document.onkeydown = function(e){
 if (e.keyCode===8) {
   return false;
 }
};
于 2012-04-25T06:20:58.147 回答
0

完全防止退格键可能不是一个好主意,假设您打错字并想在文本框中修复它!因此,只有当有人没有输入文本输入时,您才需要禁用退格!

这可能适用于所有主要浏览器:

document.onkeydown = function (e) {
    e = e || window.event;
    if (e.keyCode == 8) {                                           // Disable Backspace
        var el = document.activeElement;
        if (!((el.nodeName == "INPUT" && (el.type == "text" || el.type == "password")) || el.nodeName == "TEXTAREA")) {
            e.preventDefault();
            e.stopPropagation();
            return false;
        }
    }
};

DOM3 事件模型规范具有向后兼容性,因此我认为这可能不是问题,但这是上述代码的 DOM3 修改版本:

function KeyDownHandler(e) {
    if (e.keyCode == 8) {                                           // Disable Backspace
        var el = document.activeElement;
        if (!((el.nodeName == "INPUT" && (el.type == "text" || el.type == "password")) || el.nodeName == "TEXTAREA")) {
            e.preventDefault();
            e.stopPropagation();
        }
    }
};

if (document.attachEvent) document.attachEvent("onkeydown", KeyDownHandler);
else document.addEventListener("keydown", KeyDownHandler);

像上面这样的 DOM3 事件注册可能会很痛苦,John Resig对此有一个很好的实现,但是您可以使用像 JQuery 这样的标准跨浏览器库,它在所有主要浏览器中都可以正常工作!

于 2012-04-25T17:03:58.620 回答