主頁 > 知識庫 > 表單中Readonly和Disabled的區(qū)別詳解

表單中Readonly和Disabled的區(qū)別詳解

熱門標(biāo)簽:美圖手機(jī) 呼叫中心市場需求 檢查注冊表項(xiàng) 鐵路電話系統(tǒng) 銀行業(yè)務(wù) 智能手機(jī) 網(wǎng)站文章發(fā)布 服務(wù)器配置

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

如果說在這種情況下用readonly來代替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ù)庫。

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

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

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

小技巧:diabled可用readonly代替,background-color:#cccccc;加上灰色背景色就可以。

復(fù)制代碼 代碼如下:

!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
html xmlns="http://www.w3.org/1999/xhtml">
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帶替代,即可解決這類問題。

復(fù)制代碼 代碼如下:

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

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

將disabled="disabled" 改為 readonly = "readonly" 即可 ,按照W3C的規(guī)范:http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.12

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

不能接收焦點(diǎn)

使用tab鍵時將被跳過

可能不是successful的

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

可以接收焦點(diǎn)但不能被修改

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

可能是successful的

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

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

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

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

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

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

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

我們將表單的提交方法設(shè)置成get提交,我們就可以在url里面看到提交的內(nèi)容,發(fā)現(xiàn)被設(shè)置成disabled的控件沒有提交到服務(wù)器,readonly的提交數(shù)據(jù)到服務(wù)器了。

關(guān)于用js控制disabled和readonly的問題,下面是一段參考代碼:

復(fù)制代碼 代碼如下:

!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
html xmlns="http://www.w3.org/1999/xhtml">
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("您確定要修改您的手機(jī)號碼嗎?")){  
      document.moblie_act_form.mobile.readOnly = false;  
      document.moblie_act_form.mobile.disabled = false;                  
  }  
  return true;  
}  
/script>
/body>
/html>

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

您可能感興趣的文章:
  • readonly和disabled的區(qū)別
  • HTML中Select不用Disabled實(shí)現(xiàn)ReadOnly的效果
  • javascript中input中readonly和disabled區(qū)別介紹
  • jquery設(shè)置元素的readonly和disabled的寫法
  • jquery批量設(shè)置屬性readonly和disabled的方法
  • readonly和disabled屬性的區(qū)別

標(biāo)簽:紅河 樂山 沈陽 河南 滄州 新疆 上海 長治

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《表單中Readonly和Disabled的區(qū)別詳解》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266