如何防止按下退格键后返回上一页?

290

在IE中,我可以使用(非常不标准但有效的)jQuery实现此操作

if ($.browser.msie)
    $(document).keydown(function(e) { if (e.keyCode == 8) window.event.keyCode = 0;});

但是有没有可能以一种适用于Firefox的方式或者实现跨浏览器的方式呢?

记录一下:

$(document).keydown(function(e) { if (e.keyCode == 8) e.stopPropagation(); });

不做任何事情。

$(document).keydown(function(e) { if (e.keyCode == 8) e.preventDefault(); });
解决了问题,但造成了页面上不能使用退格键的问题,这甚至比原来的行为更糟糕。
编辑: 我这么做的原因是我不是在创建一个简单的网页,而是在创建一个大型应用程序。仅仅因为你在错误的位置按了一下退格键就会丢失10分钟的工作时间,这实在是太让人恼火了。避免错误与打扰用户的比例应该远高于1000/1,通过禁止退格键导航回去来防止这种情况。
编辑2:我并不想阻止历史记录导航,只是想要防止意外发生。
编辑3:@brentonstrines评论(将其移到此处,因为问题如此流行):这是一个长期的“修复”方法,但您可以支持Chromium bug以更改webkit中的此行为

142
由于退格键功能过载,你可能没有注意到,但你可能经常使用它来删除刚刚在文本框中键入的字母。我的一些客户因为这个问题而感到困扰,导致页面返回,所以这是有用的信息。除了你们这些小丑之外,没人知道退格键应该返回上一页。这是我从未知道的事情,对于浏览器来说,这是完全敌对的行为。我认为所有页面都应该禁用这种行为。 - Breton
83
为什么人们认为这很奇怪?使用退格键进行导航是一个非常愚蠢的快捷方式!有很多文本字段用户可能想要删除文本——想象一下有一个很长的stackoverflow答案,在切换到另一个窗口查看东西后,你回来时误点了编辑区域,按下退格键删除一个单词,突然浏览器返回上一页,你可能会丢失你刚刚写的所有内容。 - Peter Boughton
59
为什么我想这样做呢?我不是在创建一个网站而是一个网络应用程序。一些输入字段是只读的,看起来像可编辑的,但如果您按退格键,您将离开该页面。想要导航回去的退格键次数与试图删除某些内容的退格键次数的比率可能远小于1/1000。 - erikkallen
43
问题是如何做到这一点,而不是你对此是否是个好主意的看法。如果不知道该项目的详细信息,你的意见是没有意义的。我的客户特别要求在我的一个项目中实现这种行为,一个真正的答案而不是“你为什么要这样做?”会更有帮助。 - None
7
这是一个长期的“修复”计划,但你可以支持Chromium bug来更改webkit中的这种行为:http://code.google.com/p/chromium/issues/detail?id=144832 - brentonstrine
显示剩余13条评论
33个回答

0

Sitepoint: 禁用Javascript中的返回功能

event.stopPropagation()event.preventDefault() 在IE中无效。我不得不发送 return event.keyCode == 11 而不是只是说 "如果不等于8,则运行事件",以使其正常工作。另外,event.returnValue = false也可以起到同样的效果。


0

我已经在我的代码中使用了一段时间。我为学生编写在线测试时遇到了一个问题,当学生在测试期间按下退格键时,会将他们带回登录界面。非常令人沮丧!它在FF上肯定有效。

document.onkeypress = Backspace;
function Backspace(event) {
    if (event.keyCode == 8) {
        if (document.activeElement.tagName == "INPUT") {
            return true;
        } else {
            return false;
        }
    }
}

0

对我有用

<script type="text/javascript">


 if (typeof window.event != 'undefined')
    document.onkeydown = function()
    {
        if (event.srcElement.tagName.toUpperCase() != 'INPUT')
            return (event.keyCode != 8);
    }
else
    document.onkeypress = function(e)
    {
        if (e.target.nodeName.toUpperCase() != 'INPUT')
            return (e.keyCode != 8);
    }

</script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接