在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. 十、cent OS开启APR模式报错:configure: error: Found APR 1.3.9. You need version 1.4.3 or newer installed

    错误内容显示APR的版本过低,需要新版本 到http://apr.apache.org/download.cgi#apr1这个地址下载所需要的包apr-1.4.5.tar.gz apr-iconv-1 ...

  2. JAVA学习之路(多线程)---模拟售票(细解)

    首先看题目描述: 假设有火车票100张,创建4个线程模拟4个售票点,每100ms售出一张,打印出售票过程,格式如下: 窗口3:卖出第100张票 窗口4:卖出第99张票 ............ ... ...

  3. hdu1385 最短路字典序

    http://blog.csdn.net/ice_crazy/article/details/7785111 http://blog.csdn.net/shuangde800/article/deta ...

  4. JavaScript实现邮箱后缀提示功能

    先来个基础的 需求 根据下面需求实现如示意图所示的邮箱输入提示功能,注意,根据要求只需实现下面功能 当用户没有任何输入时,提示框消失 当用户输入字符后,显示提示框,并且把用户输入的内容自动拼上邮箱后缀 ...

  5. JS封装继承函数

    function extend(child,parent){ var F=function(){} F.prototype=parent.prototype; child.prototype=new ...

  6. 洛谷P3960 列队(动态开节点线段树)

    题意 题目链接 Sol 看不懂splay..,看不懂树状数组... 只会暴力动态开节点线段树 观察之后不难发现,我们对于行和列需要支持的操作都是相同的:找到第\(k\)大的元素并删除,在末尾插入一个元 ...

  7. 52张扑克牌快速生成js

    function* generatePoker() { const points = ['A', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K']; yield* ...

  8. css 样式表集合

    说到前端不得不说一下css样式 css样式是用来装饰我们的html让整个页面显得更丰富多彩,所以我们要熟悉各种css样式,本人搜集了一下 供大家参考一下 字体属性:(font) 大小 {font-si ...

  9. SharePoint 2013 - Host-named Site Collection

    1. 详细操作可参考此文章 的 Deployment and configuration for host-named site collections区域,简单来说,需要以下三行PowerShell ...

  10. ie6 浏览器的bug

    1.IE6不支持连续类的交集选择器 1 #box.box.box1{ 2             width: 200px; 3             height: 200px; 4       ...