0

データベース レコードの 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-statusmarried

私の質問は、この例では、ある人が既婚から独身になり、そのようにデータを更新したい場合、配偶者の名前の値もクリアして、これをサーバーに送り返し、データベースで値がクリアされるようにしたいということです。 . に変更されたときに JavaScript を使用してフィールドをクリアできますがsingle、フォーム要素を無効にして編集できないようにすると、フォームが送信されたときに POST されません。

次の解決策を考えることができます。

  • readonlyの代わりに作成することもできますdisabledが、その方法は特定のフォーム コントロールに対してのみ機能するため (具体的には、他のselect要素に対しては機能しません)、これはオプションではありません。

  • これらの各フィールドを、フォームで POST される入力として複製できますhiddenが、ユーザーが編集することはできませんが、これはそのようなハックのようです。

  • また、送信する直前に無効化されたフィールドを有効にし、その後すぐに再度無効にすることもできます。これは私が現在使用している方法ですが、何かが足りないと感じており、もっと良い方法があるはずです.

私が考えていないこと、または両方を達成するためのより賢明な方法はありますか:

  1. ユーザーがフィールドを編集できないようにする。
  2. 空白であっても、フィールドの値をフォームで POST できるようにします。
4

2 に答える 2

0

私の推奨事項は、クライアント側で検証を行うことに加えて、javascript に関数 form.submit() を追加することです。誰かが JS を無効にしてフォームを送信できない場合は、他のコメントに同意することに加えて、追加します。サーバーの検証。

于 2012-04-17T19:34:09.400 に答える