這篇文章主要介紹了表單中readonly和disabled的區(qū)別詳解,十分的細(xì)致,全面,需要了解相關(guān)信息的小伙伴們快來(lái)仔細(xì)研究下吧
readonly和disabled是用在表單中的兩個(gè)屬性,它們都能夠做到使用戶不能夠更改表單域中的內(nèi)容。但是它們之間有著微小的差別,總結(jié)如下:
readonly只針對(duì)input(text / password)和textarea有效,而disabled對(duì)于所有的表單元素都有效,包括select, radio, checkbox, button等。
但是表單元素在使用了disabled后,當(dāng)我們將表單以post或get的方式提交的話,這個(gè)元素的值不會(huì)被傳遞出去,而readonly會(huì)將該值傳遞出去(這種情況出現(xiàn)在我們將某個(gè)表單中的textarea元素設(shè)置為disabled或readonly,但是submit button卻是可以使用的)。
一般比較常用的情況是:
在某個(gè)表單中為用戶預(yù)填了某個(gè)唯一識(shí)別代碼,不允許用戶改動(dòng),但是在提交時(shí)需要傳遞該值,此時(shí)應(yīng)該將它的屬性設(shè)置為readonly。
經(jīng)常遇到當(dāng)用戶正式提交了表單后需要等待管理員的信息驗(yàn)證,這就不允許用戶再更改表單中的數(shù)據(jù),而是只能夠查看,由于disabled的作用元素范圍大,所以此時(shí)應(yīng)該使用disabled,但同時(shí)應(yīng)該注意的是要將submit button也disabled掉,否則只要用戶按了這個(gè)按鈕,如果在數(shù)據(jù)庫(kù)操作頁(yè)面中沒有做完整性檢測(cè)的話,數(shù)據(jù)庫(kù)中的值就會(huì)被清除。
如果說(shuō)在這種情況下用readonly來(lái)代替disabled的話,若表單中只有input(text/password)和textarea元素,那還是可以的,如果存在其他發(fā)元素,比如select,用戶可以在重新改寫值后按回車鍵進(jìn)行提交(回車是默認(rèn)的submit觸發(fā)按鍵)。
我們常常在用戶按了提交按鈕后,利用javascript將提交按鈕disabled掉,這樣可以防止網(wǎng)絡(luò)條件比較差的環(huán)境下,用戶反復(fù)點(diǎn)提交按鈕導(dǎo)致數(shù)據(jù)冗余地存入數(shù)據(jù)庫(kù)。
disabled和readonly這兩個(gè)屬性有一些共同之處,比如都設(shè)為true,則form屬性將不能被編輯,往往在寫js代碼的時(shí)候容易混合使用這兩個(gè)屬性,其實(shí)他們之間是有一定區(qū)別的。
如果一個(gè)輸入項(xiàng)的disabled設(shè)為true,則該表單輸入項(xiàng)不能獲取焦點(diǎn),用戶的所有操作(鼠標(biāo)點(diǎn)擊和鍵盤輸入等)對(duì)該輸入項(xiàng)都無(wú)效,最重要的一點(diǎn)是當(dāng)提交表單時(shí),這個(gè)表單輸入項(xiàng)將不會(huì)被提交。
而readonly只是針對(duì)文本輸入框這類可以輸入文本的輸入項(xiàng),如果設(shè)為true,用戶只是不能編輯對(duì)應(yīng)的文本,但是仍然可以聚焦焦點(diǎn),并且在提交表單的時(shí)候,該輸入項(xiàng)會(huì)作為form的一項(xiàng)提交。
小技巧:diabled可用readonly代替,background-color:#cccccc;加上灰色背景色就可以。
代碼如下:
<!doctype html public -//w3c//dtd xhtml 1.0 transitional//en >
<html xmlns=>
<head>
<meta http-equiv=content-type content=text/html; charset=utf-8 />
<title>untitled document</title>
</head>
<body>
<form id=form1 name=form1 method=get action=>
<input name=q1 type=text id=q1 value=readonly readonly=true />
<input name=q2 type=text disabled=disabled id=q2 value=disabled />
<input type=submit name=submit value=submit />
</form>
</body>
</html>
input的字段當(dāng)為diabled時(shí)時(shí)無(wú)法獲取數(shù)值得,所以最近不要用這個(gè),我們可以用readonly帶替代,即可解決這類問題。
代碼如下:
<input name=nowamagic id=nowamagic size=12 value=disabled disabled=disabled>
放在form表單中提交后得不到該值。
將disabled=disabled 改為 readonly = readonly 即可 ,按照w3c的規(guī)范:
設(shè)置為disabled的input將會(huì)有下面的限制:
不能接收焦點(diǎn)
使用tab鍵時(shí)將被跳過
可能不是successful的
設(shè)置為readonly的input將會(huì)有下面的限制:
可以接收焦點(diǎn)但不能被修改
可以使用tab鍵進(jìn)行導(dǎo)航
可能是successful的
只有successful的表單元素才是有效數(shù)據(jù),也即是可以進(jìn)行提交。disabled和readonly的文本輸入框只能通過腳本進(jìn)行修改value屬性。
這兩個(gè)屬性在效果和使用上的區(qū)別:
readonly是要鎖定這個(gè)控件,通過在界面上無(wú)法修改他(但是通過javascript可以修改他)。
disabled和readonly有相同的地方也是可以鎖定這個(gè)控件用戶不能改變他的值,但是disabled的更徹底一些,他是要使你完全不能使用他,包括改變他的背景顏色(不信,你去修改一個(gè)被disabled掉的input文本框,你發(fā)現(xiàn)你是徒勞),如果是checkbox則不能選中他。
所有控件都有disabled 屬性,但是不一定有readonly屬性,如select 下拉框。點(diǎn)擊被readonly掉的按鈕照樣可以觸發(fā)事件,但是被disabled掉的按鈕就無(wú)法使用了不管上面有沒有事件。
將div設(shè)置disabled屬性之后,整個(gè)div都灰掉了,但是文本框里面還是可以輸入內(nèi)容的。注意:select下拉選擇框是沒有readonly屬性的
大家仔細(xì)想一下會(huì)有一個(gè)問題出現(xiàn),就是有時(shí)候我們寫程序的時(shí)候,比如一個(gè)購(gòu)買商品的頁(yè)面,我們可以在上面輸入商品的數(shù)量,但是價(jià)格我們?cè)O(shè)置成只讀的,最后下面有一個(gè)總價(jià)格就是 數(shù)量 * 只讀的價(jià)格,那么我們很可能就是這樣做的,在后臺(tái)的時(shí)候讀取 商品數(shù)量的 textbox值,然后讀取 價(jià)格的textbox的值,然后兩者的積 作為總金額 uodate到數(shù)據(jù)庫(kù)中去了,如果客戶端的用戶和我們一樣是一個(gè)會(huì)點(diǎn)程序的小程序員,那么麻煩就有可能來(lái)拉,他可以查看源文件,查看到被readonly的價(jià)格的文本框的id或者是name什么的,然后在瀏覽器中輸入腳本去改變價(jià)格的值,然后點(diǎn)提交,那么這個(gè)小程序員就可以隨便怎么給自己打折都不過份啊。
我們將表單的提交方法設(shè)置成get提交,我們就可以在url里面看到提交的內(nèi)容,發(fā)現(xiàn)被設(shè)置成disabled的控件沒有提交到服務(wù)器,readonly的提交數(shù)據(jù)到服務(wù)器了。
關(guān)于用js控制disabled和readonly的問題,下面是一段參考代碼:
代碼如下:
<!doctype html public -//w3c//dtd xhtml 1.0 transitional//en >
<html xmlns=>
<head>
<meta http-equiv=content-type content=text/html; charset=utf-8 />
<title>無(wú)標(biāo)題文檔</title>
</head>
<body>
<form enctype=multipart/form-data action=sign.php method=post name=moblie_act_form id=moblie_act_form >
<input type=text class=input id=mobile name=mobile value={$mobile} readonly=true disabled=disabled>
<input type=button value=修改 onclick=modify_phone()>
</form>
</html>
<script language=javascript>
function modify_phone(){
if(confirm(您確定要修改您的手機(jī)號(hào)碼嗎?)){
document.moblie_act_form.mobile.readonly = false;
document.moblie_act_form.mobile.disabled = false;
}
return true;
}
</script>
</body>
</html>
以上就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。