• JS禁止后退键(backspace)使浏览器后退


    背景说明:

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

     

    提出需求:

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

      

    解决方案:

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

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

     
    <script type="text/javascript">
    
    //处理键盘事件 禁止后退键(Backspace)密码或单行、多行文本框除外
    function banBackSpace(e){   
        var ev = e || window.event;//获取event对象   
        var obj = ev.target || ev.srcElement;//获取事件源   
        
        var t = obj.type || obj.getAttribute('type');//获取事件源类型  
        
        //获取作为判断条件的事件类型
        var vReadOnly = obj.getAttribute('readonly');
        var vEnabled = obj.getAttribute('enabled');
        //处理null值情况
        vReadOnly = (vReadOnly == null) ? false : vReadOnly;
        vEnabled = (vEnabled == null) ? true : vEnabled;
        
        //当敲Backspace键时,事件源类型为密码或单行、多行文本的,
        //并且readonly属性为true或enabled属性为false的,则退格键失效
        var flag1=(ev.keyCode == 8 && (t=="password" || t=="text" || t=="textarea") 
                    && (vReadOnly==true || vEnabled!=true))?true:false;
       
        //当敲Backspace键时,事件源类型非密码或单行、多行文本的,则退格键失效
        var flag2=(ev.keyCode == 8 && t != "password" && t != "text" && t != "textarea")
                    ?true:false;        
        
        //判断
        if(flag2){
            return false;
        }
        if(flag1){   
            return false;   
        }   
    }
    
    //禁止后退键 作用于Firefox、Opera
    document.onkeypress=banBackSpace;
    //禁止后退键  作用于IE、Chrome
    document.onkeydown=banBackSpace;
    
    </script>
     
     
  • 相关阅读:
    KMP的next[]数组
    [Gauss]HDOJ3976 Electric resistance
    [Gauss]POJ2065 SETI
    [Gauss]POJ2947 Widget Factory
    更好的 SQL 模式的 10 条规则
    BZOJ2460: [BeiJing2011]元素
    BZOJ2115: [Wc2011] Xor
    洛谷P3164 [CQOI2014]和谐矩阵
    POJ1222熄灯问题
    POJ1830开关问题
  • 原文地址:https://www.cnblogs.com/yangzhilong/p/3369711.html
Copyright © 2020-2023  润新知