在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. IntelliJ IDEA+Mysql connecter/j JDBC驱动连接

    在IntelliJ IDEA中用connecter/j jdbc驱动连接MYSQL 以下是解决过程,待整合...有点懒,有空再改 官方文档:https://www.cnblogs.com/cn-chy ...

  2. Java基础(七)常用类

    一.Math类 1.Math类介绍 Math类属于java.lang包下面,里面包含用于执行基本数学运算的方法,如初等指数,对数,平方根和三角函数,该类被final修饰. 常用字段: 1.E 表示自然 ...

  3. idea快捷键、常用设置

      代码提示: code completion :ALT + / 选用Eclipse的keymap. 设置代码助手快捷键(keymap-basic) 代码上下行复制(Ctrl + Alt + Down ...

  4. PAT 1048. Find Coins

    two sum题目,算是贪婪吧 #include <cstdio> #include <cstdlib> #include <vector> #include &l ...

  5. CSS的伪类 :before 和 :after

    CSS 有两个说不上常用的伪类 :before 和 :after,偶尔会被人用来添加些自定义格式什么的,但是它们的功用不仅于此.前几天发现了 Creative Link Effects 这个非常有意思 ...

  6. new Date(年-月)时间是8点

    new Date('2018-02')获取的小时是8时解决new Date('2018-2')获取的小时是0时

  7. 新手必需用!大道至简的前端编辑器Sublime Text

    很多人在进入学习前端的时候(包括我自己),除了选择学习合适的技术,还需要一个得(自)心(己)应(喜)手(欢)的开发工具,一个得心应手的开发工具除了可以令你的效率大大提高,也可以令你在写代码的时候,心情 ...

  8. Git连接GitLab远程仓库

    1.简介 远程仓库是指托管在网络上的项目仓库,现在互联网上有很多项目托管平台,比如github.gitlab等.为了不公开自己项目代码,可以在自己的服务器上搭建自己的项目仓库,最常见的是搭建GitLa ...

  9. awk日志分析

    前言 今天我们来讲讲如何用awk进行网站日志分析,得到页面平均耗时排行 文件 [xingxing.dxx@30_28_6_20 ~]$ cat logs /Oct/::: +] GET /pages/ ...

  10. Codeforces Round #416 (Div. 2) A+B

    A. Vladik and Courtesy 2 seconds 256 megabytes   At regular competition Vladik and Valera won a and  ...