JavaScript屏蔽Backspace鍵的實(shí)現(xiàn)代碼
今天在IE瀏覽器下發(fā)現(xiàn),當(dāng)把使用readonly="readonly"
屬性將文本框設(shè)置成只讀<input type="text" readonly="readonly"/>
時(shí)有一個(gè)奇怪的問(wèn)題:如果光標(biāo)進(jìn)入只讀文本框,然后按下Backspace鍵,就會(huì)跳轉(zhuǎn)到上一個(gè)頁(yè)面,效果就像點(diǎn)擊了瀏覽器的后退按鈕返回前一個(gè)頁(yè)面一樣,而在火狐和google下沒(méi)有這樣的問(wèn)題出現(xiàn),為了解決這個(gè)問(wèn)題,寫了一個(gè)如下的處理方法,如果文本框是只讀的,那么就禁用Backspace鍵。
代碼如下:
//處理鍵盤事件 禁止后退鍵(Backspace)密碼或單行、多行文本框除外 function banBackSpace(e){ var ev = e || window.event;//獲取event對(duì)象 var obj = ev.target || ev.srcElement;//獲取事件源 var t = obj.type || obj.getAttribute('type');//獲取事件源類型 //獲取作為判斷條件的事件類型 var vReadOnly = obj.getAttribute('readonly'); //處理null值情況 vReadOnly = (vReadOnly == "") ? false : vReadOnly; //當(dāng)敲Backspace鍵時(shí),事件源類型為密碼或單行、多行文本的, //并且readonly屬性為true或enabled屬性為false的,則退格鍵失效 var flag1=(ev.keyCode == 8 && (t=="password" || t=="text" || t=="textarea") && vReadOnly=="readonly")?true:false; //當(dāng)敲Backspace鍵時(shí),事件源類型非密碼或單行、多行文本的,則退格鍵失效 var flag2=(ev.keyCode == 8 && t != "password" && t != "text" && t != "textarea") ?true:false; //判斷 if(flag2){ return false; } if(flag1){ return false; } } window.onload=function(){ //禁止后退鍵 作用于Firefox、Opera document.onkeypress=banBackSpace; //禁止后退鍵 作用于IE、Chrome document.onkeydown=banBackSpace; }
加上這樣的處理之后,就可以解決"只讀輸入框在IE下按下Backspace鍵回退到前一個(gè)頁(yè)面的問(wèn)題了"
ps:用JS屏蔽backspace(退格刪除)鍵或某一個(gè)指定鍵的完美代碼
當(dāng)我們的網(wǎng)頁(yè)內(nèi)有一個(gè)只讀屬性的表單時(shí),如下:
<input type="text" readonly="readonly" name="HuoShangName" id="HuoShangName" />
上面的這個(gè)文本域只是用來(lái)向用戶展示一些信息的,用戶不能對(duì)其進(jìn)行更改,所以加上了“readonly='readonly'”的只讀屬性,但是在IE8下面,從外觀上是看不出來(lái)它和其它正常文本域的區(qū)別的,所以有的用戶可能會(huì)對(duì)其進(jìn)行一些刪除或者添加內(nèi)容的一些操作,比如當(dāng)光標(biāo)位于這個(gè)只讀屬性的文本域內(nèi)時(shí),如果用戶按下了backspace(退格刪除鍵),那么就會(huì)導(dǎo)致整個(gè)瀏覽器的后退,會(huì)讓人很是郁悶,這時(shí)我們要做的就是屏蔽這個(gè)只讀文本域上的一些指定的鍵,使用戶按下這些鍵時(shí)不會(huì)引起瀏覽器的退后,刷新,或者前進(jìn)等動(dòng)作。
<input class="input w350" type="text" readonly="readonly" onkeydown="PingBi('8')" name="HuoShangName" id="HuoShangName" />
上面的代碼中,onkeydown表示的是當(dāng)按下按鍵時(shí)的意思,下面來(lái)JS函數(shù)pingbi的具體代碼,也是非常簡(jiǎn)單的:
function PingBi(id){ var k=window.event.keyCode; if(k==id){window.event.keyCode=0;window.event.returnValue=false;return false;} }
好了,這樣當(dāng)光標(biāo)位于只讀屬性的文本域內(nèi)時(shí),用戶按下backspace(退格刪除鍵)時(shí)就不會(huì)引起瀏覽器的后退了。
總結(jié)
以上所述是小編給大家介紹的JavaScript屏蔽Backspace鍵的實(shí)現(xiàn)代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
JavaScript 消息框效果【實(shí)現(xiàn)代碼】
下面小編就為大家?guī)?lái)一篇JavaScript 消息框效果【實(shí)現(xiàn)代碼】。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考2016-04-04多個(gè)js與css文件的合并方法詳細(xì)說(shuō)明
在Web項(xiàng)目的開發(fā)中,js,css文件會(huì)隨著項(xiàng)目的開發(fā)變得越來(lái)越多,越來(lái)越大,這就給給性能方面帶來(lái)一些問(wèn)題;解決該問(wèn)題的一個(gè)好的方法就是合并js,css文件需要了解的朋友可以參考下2012-12-12JavaScript實(shí)現(xiàn)從數(shù)組中選出和等于固定值的n個(gè)數(shù)
這篇文章主要介紹了JavaScript實(shí)現(xiàn)從數(shù)組中選出和等于固定值的n個(gè)數(shù)的方法,需要的朋友可以參考下2014-09-09js鼠標(biāo)點(diǎn)擊圖片切換效果實(shí)現(xiàn)代碼
這篇文章為大家分享了js鼠標(biāo)點(diǎn)擊圖片切換效果實(shí)現(xiàn)代碼,特別炫酷的效果,具有一定的參考價(jià)值,推薦給大家,感興趣的小伙伴們可以參考一下2015-11-11js關(guān)閉瀏覽器時(shí)退出賬號(hào)的處理
某些網(wǎng)站,尤其是涉及錢的網(wǎng)站,現(xiàn)在基本都有一個(gè)機(jī)制是兩小時(shí)后登陸自動(dòng)失效,要重新登陸確認(rèn)身份,那么js關(guān)閉瀏覽器時(shí)退出賬號(hào)如何實(shí)現(xiàn),感興趣的可以了解一下2021-12-12JavaScript極簡(jiǎn)入門教程(三):數(shù)組
這篇文章主要介紹了JavaScript極簡(jiǎn)入門教程(二):數(shù)組,本文主要講解了數(shù)組的創(chuàng)建和length屬性的介紹,其它方法屬性都沒(méi)有介紹,需要的朋友可以參考下2014-10-10JavaScript利用時(shí)間分片實(shí)現(xiàn)高性能渲染數(shù)據(jù)詳解
為了豐富我們的知識(shí)體系,我們有必要了解并清楚當(dāng)遇到大量數(shù)據(jù)時(shí),如何才能在不卡主頁(yè)面的情況下渲染數(shù)據(jù),以及其中背后的原理,本文介紹了如何使用時(shí)間分片的方式來(lái)渲染大量數(shù)據(jù),感興趣的可以了解下2023-05-05JS實(shí)現(xiàn)滾動(dòng)觸底的思路與代碼(附PC端滾動(dòng)分頁(yè)加載數(shù)據(jù))
Javascript實(shí)現(xiàn)當(dāng)頁(yè)面滾動(dòng)到底部時(shí)觸發(fā)加載事件,可以通過(guò)監(jiān)聽窗口的滾動(dòng)事件,同時(shí)判斷當(dāng)前滾動(dòng)條的位置和文檔總高度來(lái)實(shí)現(xiàn)該功能,這篇文章主要給大家介紹了關(guān)于JS實(shí)現(xiàn)滾動(dòng)觸底的思路與代碼,文中還附PC端滾動(dòng)分頁(yè)加載數(shù)據(jù),需要的朋友可以參考下2024-06-06