在IE浏览器中,会出现当你使用鼠标选中input标签或者是textarea标签,或者啥也没选中的时候,按下backspace键会触发浏览器的回退。

针对以上问题的解决思路:
    1. 当按下键盘时,判断当前按键是否为backspace
    2. 如果是,获取当前光标选中的元素、
    3. 如果不是input或者textarea,取消backspace的关联行为
    4. 如果是,则判断是否为text,password等可编辑的文本框,如果不是,则取消默认行为(此处只需要判断input,不需要判断textarea)
    5. 如果满足,继续判断是否为readonly或者disabled,如果是阻止默认行为
 

以下是代码实现,分为JS和jQuery两种,针对浏览器的适配,推荐使用jQuery版

1. JavaScript版:
 /*
JS版
作用:阻止按下backspace键造成页面回退相像
*/
window.onload=function(){
document.getElementsByTagName("body")[0].onkeydown =function(){
/*获取事件对象
* event.relatedTarget IE不支持,fireFox不支持
* event.srcElement IE支持,fireFox不支持
* event.target IE,fireFox都支持
* event.currentTarget IE和fireFox都支持
*/
/*var elem = event.currentTarget || event.relatedTarget || event.target || event.target;*/ if(event.keyCode==8){//判断按键为backSpace键 //获取事件
var elem = event.srcElement || event.currentTarget;
//判断是否需要阻止按下键盘的事件默认传递
var name = elem.nodeName;
// 如果name不为INPUT或者是TEXTAREA任意一个,就阻止该动作
if(name!='INPUT' && name!='TEXTAREA'){
return stopIt(event);
}
// 获取该元素的type属性值
var type_e = elem.type.toUpperCase();
// 如果type属性不是text,textarea,password.file中的任意一个,则阻止该backspace操作
if(name=='INPUT' && (type_e!='TEXT' && type_e!='TEXTAREA' && type_e!='PASSWORD' && type_e!='FILE')){
return stopIt(event);
}
// 如果是个input,并且type也满足要求,继续判断是否是readonly或者是disabled不可编辑的文本框
// 如果是,则阻止该backspace操作
if(name=='INPUT' && (elem.readOnly==true || elem.disabled ==true)){
return stopIt(event);
}
}
}
}
function stopIt(e){
// 如果设置了该属性,它的值比事件句柄的返回值优先级高。
// 把这个属性设置为 fasle,可以取消发生事件的源元素的默认动作。
if(e.returnValue){
e.returnValue = false ;
}
// 通知浏览器不要执行与该事件相关联的默认动作
if(e.preventDefault ){
e.preventDefault();
}
// 阻止浏览器执行相关动作
return false;
}

2. jQuery版:

 /*
jQuery版
*/
$(function(){
$("body").keydown(function(e){
// 获取当前按键的Code
var keyCode = e.which;
// 当keyCode值为8是,为backspace按键被触发
if(keyCode == 8){
// 获取按下backspace键时光标指向的元素
var elem = document.activeElement.tagName;
//判断elem是否为input或者是textarea
if(elem != "INPUT" && elem != "TEXTAREA"){
// 阻止该操作
return stopIt(e);
}
// 如果elem为input或者是textarea,则判断type类型是否为text,textarea,password,file
var elemType = document.activeElement.type; if(elemType != "text" && elemType != "textarea" && elemType!= "password" && elemType != "file"){
return stopIt(e);
}
// 如果满足上述条件了,继续判断是否为readonly或者是disabled
//var dis = document.activeElement.getAttribute("disabled"); // 返回值为null或disabled
//var read = document.activeElement.getAttribute("readonly"); // 返回值为null或readonly //var dis = document.activeElement.disabled; //返回值为false或true
//var read = document.activeElement.readOnly; // 返回值为false或true if(document.activeElement.disabled || document.activeElement.readOnly){
return stopIt(e);
}
}
});
});
function stopIt (e) {
// 如果设置了该属性,它的值比事件句柄的返回值优先级高。
// 把这个属性设置为 fasle,可以取消发生事件的源元素的默认动作。
if(e.returnValue){
e.returnValue = false ;
}
// 通知浏览器不要执行与该事件相关联的默认动作
if(e.preventDefault ){
e.preventDefault();
}
// 阻止浏览器执行相关动作
return false;
}
 

阻止按下backspace键造成页面回退相像的更多相关文章

  1. 本地安装apk后直接打开,按下Home键再重新打开,然后按下返回键时页面展示错误的处理方法

    情景: 1.下载apk到手机本地,点击本地apk开始安装 2.安装完成后,一般会有 “完成” 和 “打开” 两个按钮,点击 “完成” 按钮时是没有问题的,不管它 3.点击 “打开” 按钮,进入到首页( ...

  2. 【JS】【1】JavaScript屏蔽Backspace键(避免点击后页面产生回退)

    前言: 1,参考资料:JavaScript屏蔽Backspace键 - 孤傲苍狼 - 博客园(http://www.cnblogs.com/xdp-gacl/p/3785806.html) 2,参考的 ...

  3. 前端魔法堂:屏蔽Backspace导致页面回退

    前言  前几天用户反映在录入资料时一不小心错按Backspace键,就会直接回退到是一个页面,导致之前辛辛苦苦录入的资料全部丢失了.哦?居然还有这种情况.下面我们来一起探讨一下吧! Windows系统 ...

  4. js禁止Backspace键使浏览器后退

    在项目中遇到按下Backspace键让浏览器后退的问题,上网搜了几种解决方案都不太理想.于是集众人之智,采众家之长,归纳如下: 这里主要参考博客http://q821424508.iteye.com/ ...

  5. JavaScript屏蔽Backspace键

    原文:http://www.cnblogs.com/xdp-gacl/p/3785806.html 今天在IE浏览器下发现,当把使用readonly="readonly"属性将文本 ...

  6. JavaScript学习总结(二十二)——JavaScript屏蔽Backspace键

    今天在IE浏览器下发现,当把使用readonly="readonly"属性将文本框设置成只读<input type="text" readonly=&qu ...

  7. vi 方向键和Backspace键失效问题的解决方法

    安装的ubuntu默认的编辑器是vi,遇到了两个问题: ① insert模式下,按方向键将产生A.B.C.D等字符,解决方案: :set nocompatible ② insert模式下Backspa ...

  8. 前端javascript如何阻止按下退格键页面回退 但 不阻止文本框使用退格键删除文本

    这段代码可以: document.onkeydown = function (e) { e.stopPropagation(); // 阻止事件冒泡传递 e.preventDefault(); // ...

  9. 在IE下,如果在readonly的input里面键入backspace键,会触发history.back()

    在IE下,如果在readonly的input里面键入backspace键,会触发history.back(), 用以下jQuery代码修正之 $("input[readOnly]" ...

随机推荐

  1. 超时重试(一)ajax

    我们使用jquery的ajax,超时重试可以采用两种方式,一种是配置ajax的timeout的参数,另一种就是以setTimeout定时器的方式实现: 1)timeout参数配置方式 var xhr ...

  2. 来看看javaweb的自定义标签

    1.为什么需要自定义标签? jsp的简单标签其实就是jsp的自定义标签,主要作用就是移除jsp页面中的java代码,使得jsp页面只有标签和EL表达式,而没有java代码.利用自定义标签,可以使软件开 ...

  3. Open Live Writer 安装和博客账号配置

    打开Open Live Writer就像您的博客的Word一样.打开Live Writer是一个功能强大,轻量级的博客编辑器,允许您创建博客文章,添加照片和视频,然后发布到您的网站. Open Liv ...

  4. K2P断流问题

    本帖最后由 yufei8051 于 2019-3-15 15:29 编辑 感谢 “zhc887”的指点,把这3个文件删除后(后面大神说不是删除是清除,我直接删掉貌似也正常,建议听大神的)从这两天的使用 ...

  5. MobileWeb 适配总结

    开门见山,本篇将总结一下 MobileWeb 的适配方法,即我们常说的H5页面.手机页面.WAP页.webview页面等等. 本篇讨论的页面指专门针对手机设备设计的页面,并非兼容全设备的响应式布局. ...

  6. 软件项目技术点(9)——如何将gif动态图拆分绘制

    AxeSlide软件项目梳理   canvas绘图系列知识点整理 背景介绍 我们的软件支持插入gif图片,并且展示在软件里是动态的,例如插入下面这张gif图. 在软件里显示的同样是这样的动态效果: 那 ...

  7. Canvas中的save方法和restore方法

    初学者也许会误认为canvas中save方法是用来保存绘图状态的图形,而restore方法是用来还原之前保存的绘图状态的图形,其实不然. save():保存当前的绘图状态. restore():恢复之 ...

  8. Thrift-RPC client in Flume

    Get RpcClient from RpcClientFactory with Reflection programming Message or Event definition in Flum ...

  9. IE的兼容性设置 X-UA-Compatible

    < meta http-equiv = "X-UA-Compatible" content = "IE=edge,chrome=1" /> 是IE8 ...

  10. 面试准备之一Python

    基本数据类型 函数 模块与包 面向对象 网络编程 垃圾回收机制 G 并发编程