1. 程式人生 > >關於input設定為disabled後,無法傳值到後臺

關於input設定為disabled後,無法傳值到後臺

<select class="js-select-id " style="margin-top:15px; ">
    <option style="color:#000;" value="身份證">身份證編號</option>
    <option style="color:#000;" value="護照">護照編號</option>
</select>
<input type="text" id="usr_nm" name="usr_nm" maxlength="50" value="">
<a class="link"
href="javascript:void(0);">
驗證</a> //指令碼增加disabled <script type="text/javascript"> jQuery('input#usr_nm, .js-select-id, .link').attr('disabled', 'disabled'); </script>

問題描述:

1.當我將這些標籤全部設為disabled之後,發現<a>標籤仍然有效,且後臺無法獲取input標籤中的值了;
2.當我將這些標籤全部設為readonly之後, 發現<select>

標籤仍然有效,<a>標籤依然有效;

解決方案:

<select class="js-select-id " style="margin-top:15px; ">
    <option style="color:#000;" value="身份證">身份證編號</option>
    <option style="color:#000;" value="護照">護照編號</option>
</select>
<input type="text" id="usr_nm" name="usr_nm" maxlength
="50" value="">
//我將<a>標籤換成<button>標籤,同時加上`cursor:pointer`使滑鼠移到上面有小手圖形 <button class="link" style="cursor:pointer">驗證</button> <script type="text/javascript"> //input標籤我用readonly,select標籤繼續用disabled jQuery('#usr_nm').attr('readonly', 'readonly'); jQuery('.js-select-id').attr('disabled', 'disabled'); </script>

刨根問底:

按照W3C的規範
設定為disabled的input將會有下面的限制:
- 不能接收焦點(如:jQuery(‘#usr_nm’).focus();)
- 使用tab鍵時將被跳過
- 可能不是successful的

設定為readonly的input將會有下面的限制:
- 可以接收焦點但不能被修改
- 可以使用tab鍵進行導航
- 可能是successful的
- 只有successful的表單元素才是有效資料,也就是可以進行form表單提交。disabled和readonly的文字輸入框只能通過指令碼進行修改value屬性。

input中的disabled 和 readonly的區別

1、Readonly只針對input(text / password)和textarea有效,而disabled對於所有的表單元素都有效,
2、但是表單元素在使用了disabled後,當我們將表單以POST或GET的方式提交的話,這個元素的值不會被傳遞出去,而readonly會將該值傳遞出去(readonly接受值更改可以回傳,disable接受改但不回傳資料)。

disabled和readonly這兩個屬性有一些共同之處,比如都設為true,則form屬性將不能被編輯,往往在寫js程式碼的時候容易混合使用這兩個屬性,其實他們之間是有一定區別的:
1. 如果一個輸入項的disabled設為true,則該表單輸入項不能獲取焦點,使用者的所有操作(滑鼠點選和鍵盤輸入等)對該輸入項都無效,最重要的一點是當提交表單時,這個表單輸入項將不會被提交。
2. 而readonly只是針對文字輸入框這類可以輸入文字的輸入項,如果設為true,使用者只是不能編輯對應的文字,但是仍然可以聚焦焦點,並且在提交表單的時候,該輸入項會作為form的一項提交。

===================

一般比較常用的情況是:
1.在某個表單中為使用者預填了某個唯一識別程式碼,不允許使用者改動,但是在提交時需要傳遞該值,此時應該將它的屬性設定為readonly 。
2.經常遇到當用戶正式提交了表單後需要等待管理員的資訊驗證,這就不允許使用者再更改表單中的資料,而是隻能夠檢視,由於disabled的作用元素範圍大,所以此時應該使用disabled,但同時應該注意的是要將submit button也disabled掉,否則只要使用者按了這個按鈕,如果在資料庫操作頁面中沒有做完整性檢測的話,資料庫中的值就會被清除。如果說在這種情況下用readonly來代替disabled的話,若表單中只有input(text / password)和textarea元素,那還是可以的,如果存在其他發元素,比如select,使用者可以在重新改寫值後按回車鍵進行提交(回車是預設的submit觸發按鍵)
3.我們常常在使用者按了提交按鈕後,利用javascript將提交按鈕disabled掉,這樣可以防止網路條件比較差的環境下,使用者反覆點提交按鈕導致資料冗餘地存入資料庫