阻止按下backspace键造成页面回退相像

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

针对以上问题的解决思路:

1. 当按下键盘时,判断当前按键是否为backspace

2. 如果是,获取当前光标选中的元素、

3. 如果不是input或者textarea,取消backspace的关联行为

4. 如果是,则判断是否为text,password等可编辑的文本框,如果不是,则取消默认行为(此处只需要判断input,不需要判断textarea)

5. 如果满足,继续判断是否为readonly或者disabled,如果是阻止默认行为


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


1. JavaScript版:

 1 /*
 2      JS版
 3      作用:阻止按下backspace键造成页面回退相像
 4  */
 5 window.onload=function(){
 6     document.getElementsByTagName("body")[0].onkeydown =function(){
 7         /*获取事件对象
 8          * event.relatedTarget IE不支持,fireFox不支持
 9          * event.srcElement IE支持,fireFox不支持
10          * event.target IE,fireFox都支持
11          * event.currentTarget IE和fireFox都支持
12          */
13         /*var elem =  event.currentTarget || event.relatedTarget || event.target || event.target;*/
14
15         if(event.keyCode==8){//判断按键为backSpace键
16
17                 //获取事件
18                 var elem = event.srcElement || event.currentTarget;
19                 //判断是否需要阻止按下键盘的事件默认传递
20                 var name = elem.nodeName;
21                 // 如果name不为INPUT或者是TEXTAREA任意一个,就阻止该动作
22                 if(name!=‘INPUT‘ && name!=‘TEXTAREA‘){
23                     return stopIt(event);
24                 }
25                 // 获取该元素的type属性值
26                 var type_e = elem.type.toUpperCase();
27                 // 如果type属性不是text,textarea,password.file中的任意一个,则阻止该backspace操作
28                 if(name==‘INPUT‘ && (type_e!=‘TEXT‘ && type_e!=‘TEXTAREA‘ && type_e!=‘PASSWORD‘ && type_e!=‘FILE‘)){
29                         return stopIt(event);
30                 }
31                 // 如果是个input,并且type也满足要求,继续判断是否是readonly或者是disabled不可编辑的文本框
32                 // 如果是,则阻止该backspace操作
33                 if(name==‘INPUT‘ && (elem.readOnly==true || elem.disabled ==true)){
34                         return stopIt(event);
35                 }
36             }
37         }
38     }
39     function stopIt(e){
40             // 如果设置了该属性,它的值比事件句柄的返回值优先级高。
41             // 把这个属性设置为 fasle,可以取消发生事件的源元素的默认动作。
42             if(e.returnValue){
43                 e.returnValue = false ;
44             }
45             // 通知浏览器不要执行与该事件相关联的默认动作
46             if(e.preventDefault ){
47                 e.preventDefault();
48             }
49             // 阻止浏览器执行相关动作
50             return false;
51     }

2. jQuery版:

 1 /*
 2      jQuery版
 3 */
 4 $(function(){
 5     $("body").keydown(function(e){
 6         // 获取当前按键的Code
 7         var keyCode = e.which;
 8         // 当keyCode值为8是,为backspace按键被触发
 9         if(keyCode == 8){
10             // 获取按下backspace键时光标指向的元素
11             var elem = document.activeElement.tagName;
12             //判断elem是否为input或者是textarea
13             if(elem != "INPUT" && elem != "TEXTAREA"){
14                 // 阻止该操作
15                 return stopIt(e);
16             }
17             // 如果elem为input或者是textarea,则判断type类型是否为text,textarea,password,file
18             var elemType = document.activeElement.type;
19
20             if(elemType != "text" && elemType != "textarea" && elemType!= "password" && elemType != "file"){
21                 return stopIt(e);
22             }
23             // 如果满足上述条件了,继续判断是否为readonly或者是disabled
24             //var dis = document.activeElement.getAttribute("disabled");  // 返回值为null或disabled
25             //var read = document.activeElement.getAttribute("readonly"); // 返回值为null或readonly
26
27             //var dis = document.activeElement.disabled;  //返回值为false或true
28             //var read = document.activeElement.readOnly; // 返回值为false或true
29
30             if(document.activeElement.disabled || document.activeElement.readOnly){
31                 return stopIt(e);
32             }
33         }
34     });
35 });
36 function stopIt (e) {
37     // 如果设置了该属性,它的值比事件句柄的返回值优先级高。
38     // 把这个属性设置为 fasle,可以取消发生事件的源元素的默认动作。
39     if(e.returnValue){
40         e.returnValue = false ;
41     }
42     // 通知浏览器不要执行与该事件相关联的默认动作
43     if(e.preventDefault ){
44         e.preventDefault();
45     }
46     // 阻止浏览器执行相关动作
47     return false;
48 }
时间: 2024-10-17 04:55:53

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

如何阻止360浏览器backspace键的默认快捷键

项目中遇到在360浏览器下按键盘的删除键(backspace)就回退出系统,回到登录页面. 所以做了下面的事件处理 //处理键盘事件 function doKey(e) { var ev = e || window.event; //获取event对象 var obj = ev.target || ev.srcElement; //获取事件源 var t = obj.type || obj.getAttribute('type'); //获取事件源类型 if (ev.keyCode == 8 &

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

今天在IE浏览器下发现,当把使用readonly="readonly"属性将文本框设置成只读<input type="text" readonly="readonly"/>时有一个奇怪的问题:如果光标进入只读文本框,然后按下Backspace键,就会跳转到上一个页面,效果就像点击了浏览器的后退按钮返回前一个页面一样,而在火狐和google下没有这样的问题出现,为了解决这个问题,写了一个如下的处理方法,如果文本框是只读的,那么就禁用Ba

JavaScript屏蔽Backspace键

当使用readonly="readonly"属性将文本框设置成只读<input type="text" readonly="readonly"/>时会出现一个问题,如果光标进入只读文本框,然后按下Backspace键,就会跳转到上一个页面,效果就像点击了浏览器的后退按钮返回前一个页面一样,使用户体验大打折扣.为了解决这个问题,可在页面添加如下处理方法,如果文本框是只读的,那么就禁用Backspace键. 代码如下: <scrip

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

这段代码可以: document.onkeydown = function (e) { e.stopPropagation(); // 阻止事件冒泡传递 e.preventDefault(); // 阻止浏览器默认事件的发生 // your code if (e.keyCode == 8) { // keyCode == 8 表示按下的回退按钮 } } 下面更正一下,上面的写法有一个比较严重的问题: 这种写法虽然屏蔽了回车键页面回退的功能,但同样,如果该页面有文本输入框,那么这个输入框将不能使用

页面屏蔽backspace键

1 //页面加载完成 2 $(document).ready(function(){ 3 //禁止退格键 作用于Firefox.Opera 4 document.onkeypress = banBackSpace; 5 //禁止退格键 作用于IE.Chrome 6 document.onkeydown = banBackSpace; 7 }); 8 //处理键盘事件 禁止后退键(Backspace)密码或单行.多行文本框除外 9 function banBackSpace(e){ 10 //al

按下enter键后表单自动提交问题

在HTML的form表单里,按下enter键之后,默认情况下表单会自动提交. 在公司一个项目里,按下enter键自动提交表单的查询结果与按下搜索框的搜索结果页面显示不一样,按下搜索按钮之后是通过Ajax请求返回结果:而按下enter键是直接post请求然后跳转返回一个页面,失去了页面样式及导航等. 一开以为是写了js代码导致按下enter键之后会触发表单提交,后来把js代码全部移除也是一样地按下enter键会触发表单提交.到网上搜索发现是因为默认情况下在form表单内按下enter键会触发表单自

Python 交互模式中 Delete/Backspace 键乱码问题

进入 Python 交互模式,按下 Delete/Backspace 键,会出现 ^H 字符 解决方式: 1. 进到 Python 的Modules目录 [[email protected] Python-2.7.12]# pwd/root/Python-2.7.12[[email protected] Python-2.7.12]# cd Modules/ 2. 取消文件中 readline 部分对应的注释 vim Setup readline readline.c -lreadline -l

linux笔记(4)Ubuntu 使用时vi编辑器时,不能使用backspace键来进行退格或者不能正常使用

摘抄来自于:http://blog.csdn.net/xiaojun111111/article/details/50810439 http://hongzhguan.iteye.com/blog/1479563 刚刚把Ubuntu系统重新安装在虚拟机上,然后试用vi编辑器,发现使用vi时,不能使用backspace键来进行退格,backspace键按下去后变成ABCD,删除键无效. 解决办法: 方案一: 可以安装vim full版本,在full版本下键盘正常,安装好后同样使用vi命令. 安装v

js获取键盘按下的键值event.keyCode,event.charCode,event.which的兼容性

js获取键盘按下的键值有event.keyCode,event.charCode和event.which 其中: 谷歌浏览器对event.keyCode,event.charCode和event.which都兼容. 火狐浏览器对event.keyCode部分键值有效,如上下左右键(37,38,39,40),enter键(13),PgUp(33),PgDn(34)等部分有效,对数字键,字母键无效. event.which也是部分键值有效,如字母键,数字键,enter键,Backspace键等有效,