我怎样才能防止退格键导航回来?

在IE浏览器中,我可以用(非常非标准的,但工作)的jQuery做到这一点

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

但是有可能以一种在Firefox上运行的方式,或者以一种跨浏览器的方式来获得奖金?

作为logging:

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

什么也没做。

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

解决了这个问题,但是在页面上显示退格键不可用,这比原来的行为还要糟糕。

编辑:我这样做的原因是,我不是创build一个简单的网页,而是一个大型的应用程序。 仅仅因为你在错误的地方退下了空位而失去了10分钟的工作是令人难以置信的烦恼。 防止错误与烦人用户的比例应该在1000/1以上,防止退格键导航返回。

编辑2:我不是试图阻止历史导航,只是意外。

EDIT3:@brentonstrines评论(因为这个问题非常受欢迎,所以转移到这里):这是一个长期的“修复”,但是你可以在Chromium bug后面支持你改变webkit的行为

这段代码解决了这个问题,至less在IE和Firefox(还没有testing过任何其他的,但是如果这个问题甚至存在于其他浏览器中,我给它一个合理的工作机会)。

 // Prevent the backspace key from navigating back. $(document).unbind('keydown').bind('keydown', function (event) { if (event.keyCode === 8) { var doPrevent = true; var types = ["text", "password", "file", "search", "email", "number", "date", "color", "datetime", "datetime-local", "month", "range", "search", "tel", "time", "url", "week"]; var d = $(event.srcElement || event.target); var disabled = d.prop("readonly") || d.prop("disabled"); if (!disabled) { if (d[0].isContentEditable) { doPrevent = false; } else if (d.is("input")) { var type = d.attr("type"); if (type) { type = type.toLowerCase(); } if (types.indexOf(type) > -1) { doPrevent = false; } } else if (d.is("textarea")) { doPrevent = false; } } if (doPrevent) { event.preventDefault(); return false; } } }); 

此代码适用于所有浏览器,当不在表单元素上时,或者如果表单元素被禁用| readOnly,会吞下退格键。 它也是有效的,当它在每个input的键上执行时都是很重要的。

 $(function(){ /* * this swallows backspace keys on any non-input element. * stops backspace -> back */ var rx = /INPUT|SELECT|TEXTAREA/i; $(document).bind("keydown keypress", function(e){ if( e.which == 8 ){ // 8 == backspace if(!rx.test(e.target.tagName) || e.target.disabled || e.target.readOnly ){ e.preventDefault(); } } }); }); 

这里的其他答案已经certificate,如果没有允许使用Backspace的元素,这是无法完成的。 这个解决scheme并不理想,因为白名单不像纯文本和文本/密码input那样简单,而是反复发现不完整,需要更新。

但是,由于抑制退格function的目的仅仅是为了防止用户意外丢失数据,所以beforeunload解决scheme是一个好的select,因为模式popup是令人惊讶的 – 模式popup作为标准工作stream的一部分被触发时是不好的,因为用户习惯于在没有阅读的情况下解雇他们,而且他们很烦人。 在这种情况下,模式popup窗口只能作为罕见和令人惊讶的动作的替代方式出现,因此是可以接受的。

问题在于,无论用户何时离开页面(例如点击链接或提交表单),都不能popuponbeforeunload模式,而且我们也不希望启动白名单或列入特定条件的黑名单。

对于一般化的解决scheme来说,权衡的理想组合如下:跟踪是否按下退格键,如果是,则只popuponbeforeunload模式。 换一种说法:

 function confirmBackspaceNavigations () { // http://stackoverflow.com/a/22949859/2407309 var backspaceIsPressed = false $(document).keydown(function(event){ if (event.which == 8) { backspaceIsPressed = true } }) $(document).keyup(function(event){ if (event.which == 8) { backspaceIsPressed = false } }) $(window).on('beforeunload', function(){ if (backspaceIsPressed) { backspaceIsPressed = false return "Are you sure you want to leave this page?" } }) } // confirmBackspaceNavigations 

这已经过testing,可以在IE7 +,FireFox,Chrome,Safari和Opera上运行。 只要将这个函数放到你的global.js文件中,然后从你不希望用户意外丢失数据的页面调用它。

更优雅/简洁的解决scheme:

 $(document).on('keydown',function(e){ var $target = $(e.target||e.srcElement); if(e.keyCode == 8 && !$target.is('input,[contenteditable="true"],textarea')) { e.preventDefault(); } }) 

修改erikkallen的答案解决不同的inputtypes

我发现一个有进取心的用户可能会在checkbox或单选button上按下退格键,妄图清除它,而是向后导航并丢失所有的数据。

这个改变应该解决这个问题。

新的编辑来解决内容可编辑divs

  //Prevents backspace except in the case of textareas and text inputs to prevent user navigation. $(document).keydown(function (e) { var preventKeyPress; if (e.keyCode == 8) { var d = e.srcElement || e.target; switch (d.tagName.toUpperCase()) { case 'TEXTAREA': preventKeyPress = d.readOnly || d.disabled; break; case 'INPUT': preventKeyPress = d.readOnly || d.disabled || (d.attributes["type"] && $.inArray(d.attributes["type"].value.toLowerCase(), ["radio", "checkbox", "submit", "button"]) >= 0); break; case 'DIV': preventKeyPress = d.readOnly || d.disabled || !(d.attributes["contentEditable"] && d.attributes["contentEditable"].value == "true"); break; default: preventKeyPress = true; break; } } else preventKeyPress = false; if (preventKeyPress) e.preventDefault(); }); 


testing制作2个文件。

starthere.htm – 先打开这个,这样你就可以回去了

 <a href="./test.htm">Navigate to here to test</a> 

test.htm – 当checkbox或提交有焦点(通过Tab键实现)时按下退格键时,这将向后导航。 用我的代码replace来解决。

 <html> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js" type="text/javascript"></script> <script type="text/javascript"> $(document).keydown(function(e) { var doPrevent; if (e.keyCode == 8) { var d = e.srcElement || e.target; if (d.tagName.toUpperCase() == 'INPUT' || d.tagName.toUpperCase() == 'TEXTAREA') { doPrevent = d.readOnly || d.disabled; } else doPrevent = true; } else doPrevent = false; if (doPrevent) e.preventDefault(); }); </script> </head> <body> <input type="text" /> <input type="radio" /> <input type="checkbox" /> <input type="submit" /> </body> </html> 

根据评论的出现,你想要阻止人们在表单中丢失信息,如果他们按退格删除,但该领域不集中。

在这种情况下,你想看看onunload事件处理程序。 堆栈溢出使用它 – 如果您在开始编写答案时尝试离开页面,则会popup警告。

不知道为什么没有人回答这个问题 – 似乎是一个完全合理的技术问题,问是否可能。

不,我不认为有一个跨浏览器的方式来禁用退格键。 我知道这不是默认情况下在FF中启用。

停止导航此代码的作品!

 $(document).on("keydown", function (event) { if (event.keyCode === 8) { event.preventDefault(); } }); 

但是为了不限制文本字段,而是限制其他字段

 $(document).on("keydown", function (event) { if (event.which === 8 && !$(event.target).is("input, textarea")) { event.preventDefault(); } }); 

为了防止它在特定领域简单地使用

 $('#myOtherField').on("keydown", function (event) { if (event.keyCode === 8 || event.which === 8) { event.preventDefault(); } }); 

下面提到这个!

阻止BACKSPACE返回jQuery(如Google主页)

结合“thetoolman”&&“Biff MaGriff”

下面的代码似乎在IE 8 / Mozilla / Chrome中正常工作

 $(function () { var rx = /INPUT|TEXTAREA/i; var rxT = /RADIO|CHECKBOX|SUBMIT/i; $(document).bind("keydown keypress", function (e) { var preventKeyPress; if (e.keyCode == 8) { var d = e.srcElement || e.target; if (rx.test(e.target.tagName)) { var preventPressBasedOnType = false; if (d.attributes["type"]) { preventPressBasedOnType = rxT.test(d.attributes["type"].value); } preventKeyPress = d.readOnly || d.disabled || preventPressBasedOnType; } else {preventKeyPress = true;} } else { preventKeyPress = false; } if (preventKeyPress) e.preventDefault(); }); }); 

这个解决scheme类似于已经发布的其他解决scheme,但是它使用了一个简单的白名单,通过在.is()函数中设置select器,可以轻松地定制允许指定元素的退格。

我以这种forms使用它来防止返回页面的退格:

 $(document).on("keydown", function (e) { if (e.which === 8 && !$(e.target).is("input:not([readonly]), textarea")) { e.preventDefault(); } }); 

为了详细阐述@ erikkallen的优秀答案 ,下面是一个函数,它允许所有基于键盘的inputtypes,包括HTML5中引入的inputtypes:

 $(document).unbind('keydown').bind('keydown', function (event) { var doPrevent = false; var INPUTTYPES = [ "text", "password", "file", "date", "datetime", "datetime-local", "month", "week", "time", "email", "number", "range", "search", "tel", "url"]; var TEXTRE = new RegExp("^" + INPUTTYPES.join("|") + "$", "i"); if (event.keyCode === 8) { var d = event.srcElement || event.target; if ((d.tagName.toUpperCase() === 'INPUT' && d.type.match(TEXTRE)) || d.tagName.toUpperCase() === 'TEXTAREA') { doPrevent = d.readOnly || d.disabled; } else { doPrevent = true; } } if (doPrevent) { event.preventDefault(); } }); 

JavaScript – jQuery方式:

 $(document).on("keydown", function (e) { if (e.which === 8 && !$(e.target).is("input, textarea")) { e.preventDefault(); } }); 

Javascript – 原生的方式,适用于我:

 <script type="text/javascript"> //on backspace down + optional callback function onBackspace(e, callback){ var key; if(typeof e.keyIdentifier !== "undefined"){ key = e.keyIdentifier; }else if(typeof e.keyCode !== "undefined"){ key = e.keyCode; } if (key === 'U+0008' || key === 'Backspace' || key === 8) { if(typeof callback === "function"){ callback(); } return true; } return false; } //event listener window.addEventListener('keydown', function (e) { switch(e.target.tagName.toLowerCase()){ case "input": case "textarea": break; case "body": onBackspace(e,function(){ e.preventDefault(); }); break; } }, true); </script> 

我很难find一个非JQUERY的答案。 感谢Stas让我走上正轨。

Chrome浏览器:如果您不需要跨浏览器支持,则可以使用黑名单而不是白名单。 这个纯JS版本在Chrome中工作,但不在IE中。 不确定关于FF。

在Chrome浏览器(2014年中期版本36)中,不在input内容或可自定义元素上的按键似乎被定位到<BODY> 。 这使得使用黑名单成为可能,我宁愿将其列入白名单。 IE使用最后的点击目标 – 所以它可能是一个div或其他任何东西。 这使得IE中无用。

 window.onkeydown = function(event) { if (event.keyCode == 8) { //alert(event.target.tagName); //if you want to see how chrome handles keypresses not on an editable element if (event.target.tagName == 'BODY') { //alert("Prevented Navigation"); event.preventDefault(); } } } 

跨浏览器:对于纯JavaScript,我发现Stas的答案是最好的。 为contenteditable增加一个条件检查使它适用于我*:

 document.onkeydown = function(e) {stopDefaultBackspaceBehaviour(e);} document.onkeypress = function(e) {stopDefaultBackspaceBehaviour(e);} function stopDefaultBackspaceBehaviour(event) { var event = event || window.event; if (event.keyCode == 8) { var elements = "HTML, BODY, TABLE, TBODY, TR, TD, DIV"; var d = event.srcElement || event.target; var regex = new RegExp(d.tagName.toUpperCase()); if (d.contentEditable != 'true') { //it's not REALLY true, checking the boolean value (!== true) always passes, so we can use != 'true' rather than !== true/ if (regex.test(elements)) { event.preventDefault ? event.preventDefault() : event.returnValue = false; } } } } 

*请注意,IE [编辑:和Spartan / TechPreview]有一个“function”,使与表相关的元素不可编辑 。 如果你点击其中的一个,然后按退格键,它将回溯。 如果你没有可编辑的,这不是一个问题。

我接受的解决scheme和Select2.js插件有一些问题; 由于删除操作被阻止,我无法删除可编辑框中的字符。 这是我的解决scheme:

 //Prevent backwards navigation when trying to delete disabled text. $(document).unbind('keydown').bind('keydown', function (event) { if (event.keyCode === 8) { var doPrevent = false, d = event.srcElement || event.target, tagName = d.tagName.toUpperCase(), type = (d.type ? d.type.toUpperCase() : ""), isEditable = d.contentEditable, isReadOnly = d.readOnly, isDisabled = d.disabled; if (( tagName === 'INPUT' && (type === 'TEXT' || type === 'PASSWORD')) || tagName === 'PASSWORD' || tagName === 'TEXTAREA') { doPrevent = isReadOnly || isDisabled; } else if(tagName === 'SPAN'){ doPrevent = !isEditable; } else { doPrevent = true; } } if (doPrevent) { event.preventDefault(); } }); 

Select2将创build一个带有“contentEditable”属性的Span,对于其中的可编辑combobox,它将被设置为true。 我添加了代码来说明跨度tagName和不同的属性。 这解决了我所有的问题。

编辑:如果你没有使用jQuery的Select2combobox插件,那么你可能不需要这个解决scheme,而且接受的解决scheme可能会更好。

大部分的答案在jQuery中。 你可以在纯Javascript中完成这个工作,简单,不需要任何库。 这篇文章对我来说是一个很好的起点,但是由于keyIdentifier已经被弃用了,所以我希望这段代码更加安全,所以我把|| e.keyCode == 8join了if语句。 另外,代码在Firefox上不能正常工作,所以我添加了返回false; 现在它工作得很好。 这里是:

 <script type="text/javascript"> window.addEventListener('keydown',function(e){if(e.keyIdentifier=='U+0008'||e.keyIdentifier=='Backspace'||e.keyCode==8){if(e.target==document.body){e.preventDefault();return false;}}},true); </script> 

这个代码很好,因为,

  1. 它是在纯粹的JavaScript(无需库)。
  2. 它不仅检查按键,它确认动作是否真的是一个浏览器“回”行动。
  3. 与上述一起,用户可以在input文本框中input和删除文本,而不会出现任何问题,同时还可以防止后退button操作。
  4. 它简短,干净,快速和直接的点。

你可以添加console.log(e); 为了您的testing目的,并在Chrome浏览器中按F12键,进入“控制台”选项卡并点击页面上的“退格”,然后查看内容以查看返回的值,然后可以定位所有这些参数以进一步增强代码以上,以满足您的需求。

  document.onkeydown = function (e) { e.stopPropagation(); if ((e.keyCode==8 || e.keyCode==13) && (e.target.tagName != "TEXTAREA") && (e.target.tagName != "INPUT")) { return false; } }; 

这段代码解决了所有浏览器中的问题:

 onKeydown:function(e) { if (e.keyCode == 8) { var d = e.srcElement || e.target; if (!((d.tagName.toUpperCase() == 'BODY') || (d.tagName.toUpperCase() == 'HTML'))) { doPrevent = false; } else { doPrevent = true; } } else { doPrevent = false; } if (doPrevent) { e.preventDefault(); } } 

最简单的方法来防止按退格键导航

 $(document).keydown(function () { if (event.keyCode == 8) { if (event.target.nodeName == 'BODY') { event.preventDefault(); } } }); 

使用Dojo工具包1.7,这在IE 8中工作:

 require(["dojo/on", "dojo/keys", "dojo/domReady!"], function(on, keys) { on(document.body,"keydown",function(evt){if(evt.keyCode == keys.BACKSPACE)evt.preventDefault()}); }); 

你有没有尝试过这样一个非常简单的解决scheme,只需将以下属性添加到只读文本字段中:

onkeydown =“返回false”

当在只读文本字段中按Backspace键时,这将防止浏览器回退历史logging。 也许我错过了你的真实意图,但似乎这将是你的问题最简单的解决scheme。

一个更好的解决scheme –

 $(document).on('keydown', function (e) { var key = e == null ? event.keyCode : e.keyCode; if(key == 8 && $(document.activeElement.is(':not(:input)'))) //select, textarea e.preventDefault(); }); 

或者,你只能检查是否

 $(document.activeElement).is('body') 

纯JavaScript版本,适用于所有浏览器:

 document.onkeydown = function(e) {stopDefaultBackspaceBehaviour(e);} document.onkeypress = function(e) {stopDefaultBackspaceBehaviour(e);} function stopDefaultBackspaceBehaviour(event) { var event = event || window.event; if (event.keyCode == 8) { var elements = "HTML, BODY, TABLE, TBODY, TR, TD, DIV"; var d = event.srcElement || event.target; var regex = new RegExp(d.tagName.toUpperCase()); if (regex.test(elements)) { event.preventDefault ? event.preventDefault() : event.returnValue = false; } } } 

当然你可以使用“INPUT,TEXTAREA”,然后使用“if(!regex.test(elements))”。 第一个对我很好。

性能?

我很担心表演,并做了一个小提琴: http : //jsfiddle.net/felvhage/k2rT6/9/embedded/result/

 var stresstest = function(e, method, index){... 

我已经分析了我在这个线程中find的最有前途的方法。 事实certificate,他们都非常快速,而且很可能不会造成打字时的“呆滞”问题。 我查看的最慢的方法是在IE8中的10.000个调用约125毫秒。 每冲程0.0125ms。

我发现Codenepal和Robin Maben发布的方法最快〜0.001ms(IE8),但是要注意不同的语义。

也许这是对他的代码引入这种function的人的一种解脱。

修改erikkallen答案:

 $(document).unbind('keydown').bind('keydown', function (event) { var doPrevent = false, elem; if (event.keyCode === 8) { elem = event.srcElement || event.target; if( $(elem).is(':input') ) { doPrevent = elem.readOnly || elem.disabled; } else { doPrevent = true; } } if (doPrevent) { event.preventDefault(); return false; } }); 

这个解决scheme在testing时效果很好。

我添加了一些代码来处理一些没有标记input的input字段,并将其集成到为我的工作生成input表单的Oracle PL / SQL应用程序中。

我的“两分钱”:

  if (typeof window.event != ''undefined'') document.onkeydown = function() { //////////// IE ////////////// var src = event.srcElement; var tag = src.tagName.toUpperCase(); if (event.srcElement.tagName.toUpperCase() != "INPUT" && event.srcElement.tagName.toUpperCase() != "TEXTAREA" || src.readOnly || src.disabled ) return (event.keyCode != 8); if(src.type) { var type = ("" + src.type).toUpperCase(); return type != "CHECKBOX" && type != "RADIO" && type != "BUTTON"; } } else document.onkeypress = function(e) { //////////// FireFox var src = e.target; var tag = src.tagName.toUpperCase(); if ( src.nodeName.toUpperCase() != "INPUT" && tag != "TEXTAREA" || src.readOnly || src.disabled ) return (e.keyCode != 8); if(src.type) { var type = ("" + src.type).toUpperCase(); return type != "CHECKBOX" && type != "RADIO" && type != "BUTTON"; } } 

我用目前接受的(erikkallen)的干净版本创build了一个NPM项目,

https://github.com/slorber/backspace-disabler

它基本上使用相同的原则,但是:

  • 没有依赖性
  • 支持contenteditable
  • 更可读/可维护的代码库
  • 将被支持,因为它将用于我的公司生产
  • MIT许可证

 var Backspace = 8; // See http://stackoverflow.com/questions/12949590/how-to-detach-event-in-ie-6-7-8-9-using-javascript function addHandler(element, type, handler) { if (element.addEventListener) { element.addEventListener(type, handler, false); } else if (element.attachEvent) { element.attachEvent("on" + type, handler); } else { element["on" + type] = handler; } } function removeHandler(element, type, handler) { if (element.removeEventListener) { element.removeEventListener(type, handler, false); } else if (element.detachEvent) { element.detachEvent("on" + type, handler); } else { element["on" + type] = null; } } // Test wether or not the given node is an active contenteditable, // or is inside an active contenteditable function isInActiveContentEditable(node) { while (node) { if ( node.getAttribute && node.getAttribute("contenteditable") === "true" ) { return true; } node = node.parentNode; } return false; } var ValidInputTypes = ['TEXT','PASSWORD','FILE','EMAIL','SEARCH','DATE']; function isActiveFormItem(node) { var tagName = node.tagName.toUpperCase(); var isInput = ( tagName === "INPUT" && ValidInputTypes.indexOf(node.type.toUpperCase()) >= 0 ); var isTextarea = ( tagName === "TEXTAREA" ); if ( isInput || isTextarea ) { var isDisabled = node.readOnly || node.disabled; return !isDisabled; } else if ( isInActiveContentEditable(node) ) { return true; } else { return false; } } // See http://stackoverflow.com/questions/1495219/how-can-i-prevent-the-backspace-key-from-navigating-back function disabler(event) { if (event.keyCode === Backspace) { var node = event.srcElement || event.target; // We don't want to disable the ability to delete content in form inputs and contenteditables if ( isActiveFormItem(node) ) { // Do nothing } // But in any other cases we prevent the default behavior that triggers a browser backward navigation else { event.preventDefault(); } } } /** * By default the browser issues a back nav when the focus is not on a form input / textarea * But users often press back without focus, and they loose all their form data :( * * Use this if you want the backspace to never trigger a browser back */ exports.disable = function(el) { addHandler(el || document,"keydown",disabler); }; /** * Reenable the browser backs */ exports.enable = function(el) { removeHandler(el || document,"keydown",disabler); }; 

这是我重写最高票的答案。 I tried to check element.value!==undefined (since some elements like may have no html attribute but may have a javascript value property somewhere on the prototype chain), however that didn't work very well and had lots of edge cases. There doesn't seem to be a good way to future-proof this, so a whitelist seems the best option.

This registers the element at the end of the event bubble phase, so if you want to handle Backspace in any custom way, you can do so in other handlers.

This also checks instanceof HTMLTextAreElement since one could theoretically have a web component which inherits from that.

This does not check contentEditable (combine with other answers).

https://jsfiddle.net/af2cfjc5/15/

 var _INPUTTYPE_WHITELIST = ['text', 'password', 'search', 'email', 'number', 'date']; function backspaceWouldBeOkay(elem) { // returns true if backspace is captured by the element var isFrozen = elem.readOnly || elem.disabled; if (isFrozen) // a frozen field has no default which would shadow the shitty one return false; else { var tagName = elem.tagName.toLowerCase(); if (elem instanceof HTMLTextAreaElement) // allow textareas return true; if (tagName=='input') { // allow only whitelisted input types var inputType = elem.type.toLowerCase(); if (_INPUTTYPE_WHITELIST.includes(inputType)) return true; } return false; // everything else is bad } } document.body.addEventListener('keydown', ev => { if (ev.keyCode==8 && !backspaceWouldBeOkay(ev.target)) { //console.log('preventing backspace navigation'); ev.preventDefault(); } }, true); // end of event bubble phase 

Sitepoint: Disable back for Javascript

event.stopPropagation() and event.preventDefault() do nothing in IE. I had to send return event.keyCode == 11 (I just picked something) instead of just saying "if not = 8, run the event" to make it work, though. event.returnValue = false also works.

Another method using jquery

  <script type="text/javascript"> //set this variable according to the need within the page var BACKSPACE_NAV_DISABLED = true; function fnPreventBackspace(event){if (BACKSPACE_NAV_DISABLED && event.keyCode == 8) {return false;}} function fnPreventBackspacePropagation(event){if(BACKSPACE_NAV_DISABLED && event.keyCode == 8){event.stopPropagation();}return true;} $(document).ready(function(){ if(BACKSPACE_NAV_DISABLED){ //for IE use keydown, for Mozilla keypress //as described in scr: http://www.codeproject.com/KB/scripting/PreventDropdownBackSpace.aspx $(document).keypress(fnPreventBackspace); $(document).keydown(fnPreventBackspace); //Allow Backspace is the following controls var jCtrl = null; jCtrl = $('input[type="text"]'); jCtrl.keypress(fnPreventBackspacePropagation); jCtrl.keydown(fnPreventBackspacePropagation); jCtrl = $('input[type="password"]'); jCtrl.keypress(fnPreventBackspacePropagation); jCtrl.keydown(fnPreventBackspacePropagation); jCtrl = $('textarea'); jCtrl.keypress(fnPreventBackspacePropagation); jCtrl.keydown(fnPreventBackspacePropagation); //disable backspace for readonly and disabled jCtrl = $('input[type="text"][readonly="readonly"]') jCtrl.keypress(fnPreventBackspace); jCtrl.keydown(fnPreventBackspace); jCtrl = $('input[type="text"][disabled="disabled"]') jCtrl.keypress(fnPreventBackspace); jCtrl.keydown(fnPreventBackspace); } }); </script> 

I've been using this in my code for some time now. I write online tests for students and ran into the problem when students were pressing backspace during their test and it would take them back to the login screen. 令人沮丧! It works on FF for sure.

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