在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. Activiti工作流小序曲

    一般涉及到OA.ERP等公司办公系统都必须有一套办公流程,这时候使用activiti工作流框架会大大减轻我们的工作量,提高我们的开发效率. Activiti工作流简单介绍: 工作流(workflow) ...

  2. maven父子项目

    maven搭建父子项目 1.先建立一个父项目,建立项目的时候,选择  Create a simple project 点击 next,填写以下信息 点击finish就可以了. 2.接下来要建立一个子项 ...

  3. Bzoj1498&1416: [NOI2006]神奇的口袋

    什么鬼双倍经验题??? Sol 考虑在第\(k\)次摸到\(y\)的概率 如果上次摸到\(y\),目前有\(sum\)个球,\(y\)有\(a[y]\)个,那么概率就是\(\frac{a[y]+d}{ ...

  4. linux 下解决git clone报错

    解决报错:error: The requested URL returned error: 401 Unauthorized while accessing   问题报错:error: The req ...

  5. Google自写插件详解

    谷歌插件详解,跳转至个人主页查看. GoogleExtension

  6. 原生JS,运动的小人

    今天突然想起来,不知道在什么网站上看的一个纯纯的原生JS写的效果,运动的小人,所以在这里给大家分享一下代码: 并说明:这不是本人写的,而是我在浏览网站是无意中发现的,现在已经不记得是哪个网站了,但是要 ...

  7. js event事件对象概括

    事件是用户或者浏览器自身执行的动作,而响应某个事件的函数就叫做事件处理程序或者叫事件侦听器. 定义事件处理程序可以大致分为以下三种: 一.html事件处理程序 元素支持的每种事件都可以用一个与之对应的 ...

  8. php接收post过来的json数据

    <html> <head> <title>json</title> <script src="//cdn.bootcss.com/jqu ...

  9. C#链接数据库:SQL Server 2008

    自己学习C#编程,在WinForm编程中,代码测试连接数据库. 现在sqlserver中测试使用的数据库能否以指定的用户名和密码登录. 如图所示,计算机名为administrator,数据库实例为sq ...

  10. Mysql 优化配置2

    服务器物理硬件的优化 来源社区,个人作为收集 在挑选硬件服务器时,我们应该从下面几个方面着重对MySQL服务器的硬件配置进行优化,也就是说将项目中的资金着重投入到如下几处: 1.磁盘寻道能力(磁盘I/ ...