表單中readonly和disabled的區(qū)別詳解
來(lái)源:易賢網(wǎng) 閱讀:991 次 日期:2016-06-27 08:41:51
溫馨提示:易賢網(wǎng)小編為您整理了“表單中readonly和disabled的區(qū)別詳解”,方便廣大網(wǎng)友查閱!

這篇文章主要介紹了表單中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)容了,希望大家能夠喜歡。

更多信息請(qǐng)查看網(wǎng)頁(yè)制作
易賢網(wǎng)手機(jī)網(wǎng)站地址:表單中readonly和disabled的區(qū)別詳解
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!
相關(guān)閱讀網(wǎng)頁(yè)制作

2025國(guó)考·省考課程試聽報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)