表單中Readonly和Disabled的區(qū)別詳解
來源:易賢網(wǎng) 閱讀:839 次 日期:2015-03-13 13:35:45
溫馨提示:易賢網(wǎng)小編為您整理了“表單中Readonly和Disabled的區(qū)別詳解”,方便廣大網(wǎng)友查閱!

這篇文章主要介紹了表單中Readonly和Disabled的區(qū)別詳解,十分的細致,全面,需要了解相關(guān)信息的小伙伴們快來仔細研究下吧

Readonly和Disabled是用在表單中的兩個屬性,它們都能夠做到使用戶不能夠更改表單域中的內(nèi)容。但是它們之間有著微小的差別,總結(jié)如下:

Readonly只針對input(text / password)和textarea有效,而disabled對于所有的表單元素都有效,包括select, radio, checkbox, button等。

但是表單元素在使用了disabled后,當(dāng)我們將表單以POST或GET的方式提交的話,這個元素的值不會被傳遞出去,而readonly會將該值傳遞出去(這種情況出現(xiàn)在我們將某個表單中的textarea元素設(shè)置為disabled或readonly,但是submit button卻是可以使用的)。

一般比較常用的情況是:

在某個表單中為用戶預(yù)填了某個唯一識別代碼,不允許用戶改動,但是在提交時需要傳遞該值,此時應(yīng)該將它的屬性設(shè)置為readonly。

經(jīng)常遇到當(dāng)用戶正式提交了表單后需要等待管理員的信息驗證,這就不允許用戶再更改表單中的數(shù)據(jù),而是只能夠查看,由于disabled的作用元素范圍大,所以此時應(yīng)該使用disabled,但同時應(yīng)該注意的是要將submit button也disabled掉,否則只要用戶按了這個按鈕,如果在數(shù)據(jù)庫操作頁面中沒有做完整性檢測的話,數(shù)據(jù)庫中的值就會被清除。

如果說在這種情況下用readonly來代替disabled的話,若表單中只有input(text/password)和textarea元素,那還是可以的,如果存在其他發(fā)元素,比如select,用戶可以在重新改寫值后按回車鍵進行提交(回車是默認的submit觸發(fā)按鍵)。

我們常常在用戶按了提交按鈕后,利用javascript將提交按鈕disabled掉,這樣可以防止網(wǎng)絡(luò)條件比較差的環(huán)境下,用戶反復(fù)點提交按鈕導(dǎo)致數(shù)據(jù)冗余地存入數(shù)據(jù)庫。

disabled和readonly這兩個屬性有一些共同之處,比如都設(shè)為true,則form屬性將不能被編輯,往往在寫js代碼的時候容易混合使用這兩個屬性,其實他們之間是有一定區(qū)別的。

如果一個輸入項的disabled設(shè)為true,則該表單輸入項不能獲取焦點,用戶的所有操作(鼠標(biāo)點擊和鍵盤輸入等)對該輸入項都無效,最重要的一點是當(dāng)提交表單時,這個表單輸入項將不會被提交。

而readonly只是針對文本輸入框這類可以輸入文本的輸入項,如果設(shè)為true,用戶只是不能編輯對應(yīng)的文本,但是仍然可以聚焦焦點,并且在提交表單的時候,該輸入項會作為form的一項提交。

小技巧: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ù)值得,所以最近不要用這個,我們可以用readonly帶替代,即可解決這類問題。

代碼如下:

<input name="nowamagic" id="nowamagic" size="12" value="disabled" disabled="disabled">

放在form表單中提交后得不到該值。

將disabled="disabled" 改為 readonly = "readonly" 即可 ,按照W3C的規(guī)范:

設(shè)置為disabled的input將會有下面的限制:

不能接收焦點

使用tab鍵時將被跳過

可能不是successful的

設(shè)置為readonly的input將會有下面的限制:

可以接收焦點但不能被修改

可以使用tab鍵進行導(dǎo)航

可能是successful的

只有successful的表單元素才是有效數(shù)據(jù),也即是可以進行提交。disabled和readonly的文本輸入框只能通過腳本進行修改value屬性。

這兩個屬性在效果和使用上的區(qū)別:

readonly是要鎖定這個控件,通過在界面上無法修改他(但是通過javascript可以修改他)。

disabled和readonly有相同的地方也是可以鎖定這個控件用戶不能改變他的值,但是disabled的更徹底一些,他是要使你完全不能使用他,包括改變他的背景顏色(不信,你去修改一個被disabled掉的input文本框,你發(fā)現(xiàn)你是徒勞),如果是checkbox則不能選中他。

所有控件都有disabled 屬性,但是不一定有readonly屬性,如select 下拉框。點擊被readonly掉的按鈕照樣可以觸發(fā)事件,但是被disabled掉的按鈕就無法使用了不管上面有沒有事件。

將div設(shè)置disabled屬性之后,整個div都灰掉了,但是文本框里面還是可以輸入內(nèi)容的。注意:select下拉選擇框是沒有readonly屬性的

大家仔細想一下會有一個問題出現(xiàn),就是有時候我們寫程序的時候,比如一個購買商品的頁面,我們可以在上面輸入商品的數(shù)量,但是價格我們設(shè)置成只讀的,最后下面有一個總價格就是 數(shù)量 * 只讀的價格,那么我們很可能就是這樣做的,在后臺的時候讀取 商品數(shù)量的 textbox值,然后讀取 價格的textbox的值,然后兩者的積 作為總金額 uodate到數(shù)據(jù)庫中去了,如果客戶端的用戶和我們一樣是一個會點程序的小程序員,那么麻煩就有可能來拉,他可以查看源文件,查看到被readonly的價格的文本框的id或者是name什么的,然后在瀏覽器中輸入腳本去改變價格的值,然后點提交,那么這個小程序員就可以隨便怎么給自己打折都不過份啊。

我們將表單的提交方法設(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>無標(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("您確定要修改您的手機號碼嗎?")){

document.moblie_act_form.mobile.readOnly = false;

document.moblie_act_form.mobile.disabled = false;

}

return true;

}

</script>

</body>

</html>

以上就是本文的全部內(nèi)容了,希望大家能夠喜歡。

更多信息請查看IT技術(shù)專欄

更多信息請查看腳本欄目
易賢網(wǎng)手機網(wǎng)站地址:表單中Readonly和Disabled的區(qū)別詳解
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇剩?/div>

2025國考·省考課程試聽報名

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