我有一個表單用作數據庫記錄CRUD的接口。表單中的某些元素是相互依賴的,因此如果一個字段的值爲X,則其他字段應由用戶填寫並填寫。HTML:發佈空白/禁用表單元素的最佳做法
一個簡單的例子可能是這樣的一個個人信息部分:
<select name="relationship-status">
<option value="single">Single</option>
<option value="married">Married</option>
</select>
<input type="text" name="spouse-first-name" />
<input type="text" name="spouse-last-name" />
...其中字段如果relationship-status
設置爲married
spouse-first-name
和spouse-last-name
會被要求,將被禁用(或隱藏)除此以外。
我的問題是,在這個例子中,當一個人從結婚變爲單身,並且想要更新他們的數據時,我們也想清除配偶名稱值並將其發送回服務器,使得值在數據庫中清除。當他們更改爲single
時,我們可以使用JavaScript來清除它們的字段,但如果我們禁用表單元素以便它們不能編輯它們,那麼當表單提交時它們不會被POST。
我能想到以下解決方案:
我們可以讓他們
readonly
,而不是disabled
,但該方法只適用於某些表單控件(具體而言,它並不適用於其他select
元素工作),所以這不是一個選項。我們可以複製這些字段作爲
hidden
輸入,將與形式發佈的,而不是由用戶可編輯的,但是這似乎是這樣的黑客。我們也可以在提交之前啓用禁用的字段,然後再重新禁用它們。這是我現在使用的方法,但我覺得我錯過了一些東西,而且必須有更好的方法。
有什麼我沒有想到的,或者實現兩者的更明智方式:
- 沒有允許用戶編輯字段,
- 允許該字段的值即使空白,也可以使用表單發佈。
您應該努力在服務器端強制執行數據有效性。這意味着當有人將狀態更改爲「單個」時,配偶名稱應由服務器清除,而不管POST值如何。 – 2012-04-17 19:18:22
同意。客戶端驗證是爲了製作更好的用戶界面。 *服務器端*驗證是爲了執行數據完整性和業務規則。 – David 2012-04-17 19:19:43
謝謝你們,我可能會這樣做是出於其他原因;然而,它並沒有真正回答我提出的問題。還有其他的場景,服務器驗證根本沒有幫助。 – FtDRbwLXw6 2012-04-17 19:36:42