データベース レコードの CRUD のインターフェイスとして使用されるフォームがあります。フォームの一部の要素は相互に依存しているため、1 つのフィールドの値が X の場合、他のフィールドを必須にしてユーザーが入力する必要があります。
簡単な例は、個人情報セクションのようなものです。
<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" />
...フィールドspouse-first-name
とがに設定されてspouse-last-name
いる場合は必須であり、それ以外の場合は無効 (または非表示) になります。relationship-status
married
私の質問は、この例では、ある人が既婚から独身になり、そのようにデータを更新したい場合、配偶者の名前の値もクリアして、これをサーバーに送り返し、データベースで値がクリアされるようにしたいということです。 . に変更されたときに JavaScript を使用してフィールドをクリアできますがsingle
、フォーム要素を無効にして編集できないようにすると、フォームが送信されたときに POST されません。
次の解決策を考えることができます。
readonly
の代わりに作成することもできますdisabled
が、その方法は特定のフォーム コントロールに対してのみ機能するため (具体的には、他のselect
要素に対しては機能しません)、これはオプションではありません。これらの各フィールドを、フォームで POST される入力として複製できます
hidden
が、ユーザーが編集することはできませんが、これはそのようなハックのようです。また、送信する直前に無効化されたフィールドを有効にし、その後すぐに再度無効にすることもできます。これは私が現在使用している方法ですが、何かが足りないと感じており、もっと良い方法があるはずです.
私が考えていないこと、または両方を達成するためのより賢明な方法はありますか:
- ユーザーがフィールドを編集できないようにする。
- 空白であっても、フィールドの値をフォームで POST できるようにします。