JS禁用瀏覽器退格鍵實(shí)現(xiàn)思路及代碼
上周提交了一個(gè)項(xiàng)目(內(nèi)部使用的),一同事提出個(gè)BUG,說要禁用退格鍵(backspace或者叫后退鍵),因?yàn)檫@和他的習(xí)慣不一樣,擔(dān)心萬一文字錄入一半,他按了退格鍵,那整個(gè)頁面的內(nèi)容就白填了,然后信誓旦旦的說他做的系統(tǒng)中后退鍵都是不能用的,我這個(gè)系統(tǒng)有問題,當(dāng)時(shí)因?yàn)槭露?,只把這個(gè)問題記錄下來了,后來查了下他以前做的項(xiàng)目,也沒有對退格鍵進(jìn)行處理。自己的項(xiàng)目都沒處理,到我這嚷嚷來了,算了,不和年輕人一般見識(shí)。不就禁用個(gè)后退鍵,簡單。
其實(shí)說禁用也不是完全禁用,后退鍵在各瀏覽器下默認(rèn)為點(diǎn)擊了一下后退按鈕,只要保證正常的文字錄入還可以用,其他情況下的退格鍵一律禁掉??创a吧。
當(dāng)鍵盤敲下后退鍵(Backspace)后
1、禁止瀏覽器自動(dòng)后退
2、但不影響密碼、單行文本、多行文本輸入框等的回退操作
解決方案:
網(wǎng)上搜了一下,發(fā)現(xiàn)有不少解決方案,相比較之下,zywang的方案較佳
在其基礎(chǔ)上,進(jìn)行補(bǔ)充和完善,以滿足需求,整理后的代碼如下:
代碼一、核心代碼:
function forbidBackSpace(e) {
var ev = e || window.event; //獲取event對象
var obj = ev.target || ev.srcElement; //獲取事件源
var t = obj.type || obj.getAttribute('type'); //獲取事件源類型
//獲取作為判斷條件的事件類型
var vReadOnly = obj.readOnly;
var vDisabled = obj.disabled;
//處理undefined值情況
vReadOnly = (vReadOnly == undefined) ? false : vReadOnly;
vDisabled = (vDisabled == undefined) ? true : vDisabled;
//當(dāng)敲Backspace鍵時(shí),事件源類型為密碼或單行、多行文本的,
//并且readOnly屬性為true或disabled屬性為true的,則退格鍵失效
var flag1 = ev.keyCode == 8 && (t == "password" || t == "text" || t == "textarea") && (vReadOnly == true || vDisabled == true);
//當(dāng)敲Backspace鍵時(shí),事件源類型非密碼或單行、多行文本的,則退格鍵失效
var flag2 = ev.keyCode == 8 && t != "password" && t != "text" && t != "textarea";
//判斷
if (flag2 || flag1) return false;
}
//禁止后退鍵 作用于Firefox、Opera
// document.onkeypress = forbidBackSpace;
//禁止后退鍵 作用于IE、Chrome
document.onkeydown = forbidBackSpace;
代碼二、
function bindBackEvent() { //防止退格鍵
$(document).keydown(function(e){
e = window.event || e;
var code = e.keyCode || e.which;
if (code == 8) {
var src = e.srcElement || e.target;
var tag = src.tagName;
if (tag != "INPUT" && tag != "TEXTAREA") {
e.returnValue = false;
return false;
} else if ((tag == "INPUT" || tag == "TEXTAREA") && src.readOnly == true) {
e.returnValue = false;
return false;
}
}
});
}
相關(guān)文章
javascript 控制 html元素 顯示/隱藏實(shí)現(xiàn)代碼
javascript 控制 html元素 顯示/隱藏,下面是一些逐步的實(shí)現(xiàn)原理。2009-09-09
微信小程序使用slider實(shí)現(xiàn)音頻進(jìn)度條
這篇文章主要為大家詳細(xì)介紹了微信小程序使用slider實(shí)現(xiàn)音頻進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
基于Nuxt.js項(xiàng)目的服務(wù)端性能優(yōu)化與錯(cuò)誤檢測(容錯(cuò)處理)
這篇文章主要介紹了基于Nuxt.js項(xiàng)目的服務(wù)端性能優(yōu)化與錯(cuò)誤檢測(容錯(cuò)處理),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
svg插入foreignObject無法響應(yīng)事件解決
這篇文章主要為大家介紹了svg插入foreignObject無法響應(yīng)事件解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
解決layui動(dòng)態(tài)添加的元素click等事件觸發(fā)不了的問題
今天小編就為大家分享一篇解決layui動(dòng)態(tài)添加的元素click等事件觸發(fā)不了的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09
自動(dòng)生成文章摘要的代碼[JavaScript 版本]
自動(dòng)生成文章摘要的代碼[JavaScript 版本]...2007-03-03
原生javascript AJAX 三級聯(lián)動(dòng)的實(shí)現(xiàn)代碼
這篇文章主要介紹了原生javascript AJAX 三級聯(lián)動(dòng)的實(shí)現(xiàn)代碼,非常不錯(cuò)代碼簡單易懂,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-05-05

