JS禁止瀏覽器後退鍵

lingxyd_0發表於2011-08-28
 

背景說明:

今天專案測試中,同事發現一個Bug,當鍵盤敲下後退鍵(Backspace)後,瀏覽器自動後退,不符合需求,故建議禁止瀏覽器後退鍵。

 

提出需求:

當鍵盤敲下後退鍵(Backspace)後
1、禁止瀏覽器自動後退
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>


 

轉帖於: http://volunteer521.iteye.com/blog/830522

 

 

 

 

 

 

相關文章