现在的位置: 首页 > 综合 > 正文

JS禁止浏览器后退键

2018年08月18日 ⁄ 综合 ⁄ 共 1468字 ⁄ 字号 评论关闭

背景说明:

今天项目测试中,同事发现一个Bug,当键盘敲下后退键(Backspace)后,浏览器自动后退,不符合需求,故建议禁止浏览器后退键。

 

提出需求:

Html代码  收藏代码
  1. 当键盘敲下后退键(Backspace)后  
  2. 1、禁止浏览器自动后退  
  3. 2、但不影响密码、单行文本、多行文本输入框等的回退操作  

  

解决方案:

网上搜了一下,发现有不少解决方案,相比较之下,zywang的方案较佳,(原文见http://zywang.iteye.com/blog/700263) 

在其基础上,进行补充和完善,以满足需求,整理后的代码如下:

Js代码  收藏代码
  1. <script type="text/javascript">  
  2.   
  3. //处理键盘事件 禁止后退键(Backspace)密码或单行、多行文本框除外  
  4. function banBackSpace(e){     
  5.     var ev = e || window.event;//获取event对象     
  6.     var obj = ev.target || ev.srcElement;//获取事件源     
  7.       
  8.     var t = obj.type || obj.getAttribute('type');//获取事件源类型    
  9.       
  10.     //获取作为判断条件的事件类型  
  11.     var vReadOnly = obj.getAttribute('readonly');  
  12.     var vEnabled = obj.getAttribute('enabled');  
  13.     //处理null值情况  
  14.     vReadOnly = (vReadOnly == null) ? false : vReadOnly;  
  15.     vEnabled = (vEnabled == null) ? true : vEnabled;  
  16.       
  17.     //当敲Backspace键时,事件源类型为密码或单行、多行文本的,  
  18.     //并且readonly属性为true或enabled属性为false的,则退格键失效  
  19.     var flag1=(ev.keyCode == 8 && (t=="password" || t=="text" || t=="textarea")   
  20.                 && (vReadOnly==true || vEnabled!=true))?true:false;  
  21.      
  22.     //当敲Backspace键时,事件源类型非密码或单行、多行文本的,则退格键失效  
  23.     var flag2=(ev.keyCode == 8 && t != "password" && t != "text" && t != "textarea")  
  24.                 ?true:false;          
  25.       
  26.     //判断  
  27.     if(flag2){  
  28.         return false;  
  29.     }  
  30.     if(flag1){     
  31.         return false;     
  32.     }     
  33. }  
  34.   
  35. //禁止后退键 作用于Firefox、Opera  
  36. document.onkeypress=banBackSpace;  
  37. //禁止后退键  作用于IE、Chrome  
  38. document.onkeydown=banBackSpace;  
  39.   
  40. </script>  

抱歉!评论已关闭.