天天看點

readonly 和 disable的差別

readonly和disabled它們都能夠做到使使用者不能夠更改表單域中的内容。但是它們之間有着微小的差别,總結如下:

     readonly隻針對input(text / password)和textarea有效,而disabled對于所有的表單元素都有效,但是表單元素在使用了disabled後,當我們将表單以 post或get的方式送出的話,這個元素的值不會被傳遞出去,而readonly會将該值傳遞出去(readonly接受值更改可以回傳,disable接受改但不回傳資料)。

一般比較常用的情況是:

在某個表單中為使用者預填了某個唯一識别代碼,不允許使用者改動,但是在送出時需要傳遞該值,此時應該将它的屬性設定為readonly 。

經 常遇到當使用者正式送出了表單後需要等待管理者的資訊驗證,這就不允許使用者再更改表單中的資料,而是隻能夠檢視,由于disabled的作用元素範圍大,所 以此時應該使用disabled,但同時應該注意的是要将submit button也disabled掉,否則隻要使用者按了這個按鈕,如果在資料庫操作頁面中沒有做完整性檢測的話,資料庫中的值就會被清除。如果說在這種情況 下用readonly來代替disabled的話,若表單中隻有input(text / password)和textarea元素,那還是可以的,如果存在其他發元素,比如select,使用者可以在重新改寫值後按Enter鍵進行送出(回車是預設 的submit觸發按鍵)

我們常常在使用者按了送出按鈕後,利用javascript将送出按鈕disabled掉,這樣可以防止網絡條件比較差的環境下,使用者反複點送出按鈕導緻資料備援地存入資料庫。

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

如果一個輸入項的disabled設為true,則該表單輸入項不能擷取焦點,使用者的所有操作(滑鼠點選和鍵盤輸入等)對該輸入項都無效,最重要的一點是當送出表單時,這個表單輸入項将不會被送出。

而readonly隻是針對文本輸入框這類可以輸入文本的輸入項,如果設為true,使用者隻是不能編輯對應的文本,但是仍然可以聚焦焦點,并且在送出表單的時候,該輸入項會作為form的一項送出。