web-dev-qa-db-ja.com

HTMLフォームに2つの<input type = "submit">ボタンがある場合、どのボタンがクリックされたかを知るにはどうすればよいですか?

次のHTMLフォームがあるとします。

<form>
...
<input type="submit" name="queue" value="Queue item">
<input type="submit" name="submit" value="Submit item">
</form>

ユーザーがどのボタンをクリックしたかを(javascriptを使用せずに)知るにはどうすればよいですか?

送信されたデータを確認したところ、"Queue Item"をクリックしてから"queue" = "Queue Item"はサーバーに送信されます。そして、"Submit item"をクリックしてから"submit" = "Submit item"セットを送信しました。

この動作に依存できますか? HTMLフォームの標準のどこかに文書化されていますか?どうやってやるの?

43
bodacydo

はい、これに頼ることができます。完全に文書化されています こちら 。特定の関連行は言う:

フォームが処理のために送信されると、一部のコントロールの名前は現在の値とペアになり、これらのペアはフォームとともに送信されます。名前/値のペアが送信されるコントロールは、成功したコントロールと呼ばれます。

そして

フォームに複数の送信ボタンが含まれる場合、アクティブ化された送信ボタンのみが成功します。

54
Tim Perry

うん、あなたはその振る舞いに頼ることができます。

いつ <input type="submit" name="queue" value="Queue item">をクリックすると、フィールド「キュー」が設定され、「送信」は設定されません。

一方、他のボタンをクリックすると、「送信」フィールドが設定され、「キュー」は設定されません。

これに確信が持てない場合は、それらを2つのフォームに分割し、そのように作業できます。

5
mauris

この動作に依存できます。入力の値を取得します。 javascriptを使用して非表示のフォームの値を切り替えますが、javascriptに言及していないので、複数の選択肢はありません。

それは標準です。 inputタグであり、valueがあるため、valueが送信されます。

3
Pentium10

フォームを2つのフォームに分割し、他のアクションに必要な他の入力を複製します。または、ユーザーがアイテムを「キュー対送信」するかどうかを本当に知りたい場合は、両方の送信ボタンをラジオ選択に変更して2つのオプションを切り替え、新しい別個の「フォームを送信」ボタンを使用します。

その状況で、ワンクリックオプションが必要な場合は、Javascriptを使用してラジオボタンの1つが選択されていることを検出し、フォームを即座に自動送信できます。 (フォーム処理ではなく、ユーザーインターフェイスにJavascriptを使用)

0