在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(); });解决了这个问题,但是在页面上使backspace键不可用,这比最初的行为更糟糕。
编辑:我这么做的原因是我创建的不是一个简单的网页,而是一个大型的应用程序。仅仅因为你在错误的地方按下了后置空间就失去了10分钟的工作,这是令人难以置信的恼人的。防止错误与恼人用户的比率应该在1000/1以上,方法是防止后退键导航回来。
EDIT2:我是,不是试图阻止历史导航,只是意外。
EDIT3:@brentonstrines的评论(因为这个问题很流行):这是一个长期的“修复”,但是您可以支持在webkit中更改此行为的铬错误。
发布于 2010-05-04 19:11:48
这段代码解决了这个问题,至少在IE和Firefox中是这样的(还没有测试过其他浏览器,但如果这个问题在其他浏览器中存在,我就给它一个合理的机会)。
// 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;
}
}
});发布于 2011-11-21 20:49:46
此代码可在所有浏览器上工作,并在没有窗体元素时或在窗体元素禁用的情况下吞下backspace键。它也是有效的,当它在输入的每个键上执行时,这是很重要的。
$(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();
}
}
});
});发布于 2014-04-08 23:00:36
这里的其他答案已经证明,如果没有允许使用Backspace的白名单元素,就不可能做到这一点。这个解决方案并不理想,因为白名单不像仅仅文本区域和文本/密码输入那么简单,而是反复被发现是不完整的,需要更新。
然而,由于抑制backspace功能的目的仅仅是防止用户意外丢失数据,所以卸载前解决方案是一个很好的解决方案,因为模式弹出是令人惊讶的--当模式弹出作为标准工作流的一部分被触发时,它们是不好的,因为用户习惯在不读取数据的情况下删除它们,而且它们很烦人。在这种情况下,模式弹出只能作为一种罕见和令人惊讶的操作的替代,因此是可以接受的。
问题是,每当用户从页面导航(例如单击链接或提交表单时),onbeforeunload模式就不能弹出,而且我们不希望在卸载之前开始对特定的onbeforeunload条件进行白名单或黑名单。
广义解的理想折衷组合如下:跟踪是否按下了后退空间,只有在卸载前弹出该模型。换言之:
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这已经在IE7+、FireFox、Chrome、Safari和Opera中进行了测试。只需将此函数放到您的global.js中,并从您不希望用户意外丢失数据的任何页面调用它。
请注意,onbeforeunload模式只能触发一次,因此如果用户再次按退空间,该模式将不会再次触发。
请注意,这不会触发哈希更改事件,但是在这种情况下,您可以使用其他技术来防止用户意外丢失数据。
https://stackoverflow.com/questions/1495219
复制相似问题