背景說明:
今天項目測試中,同事發現一個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、Operadocument.onkeypress=banBackSpace;//禁止後退鍵 作用於IE、Chromedocument.onkeydown=banBackSpace;</script>
轉帖於: http://volunteer521.iteye.com/blog/830522