6

HTML5 ドキュメントで次のフォームを検討してください。

<form  method="post" action="http://example.com/submit/">
    <button name="confirm" value="1" type="submit">Confirm</button>
    <button name="re-send" value="1" type="submit">Re-send code</button>
    <button name="cancel" value="1" type="submit">Cancel change</button>
</form> 

Chrome を使用して、最初のボタンをクリックすると、 のリクエスト ペイロードが生成されますconfirm=1。同様に、2 番目のボタンは にre-send=1なり、3番目のボタンは になりますcancel=1

サーバー側でリクエスト ペイロードを調べると、3 つのボタンのどれがクリックされたかを判断できます (3 つのキーのうち 1 つだけがリクエスト ペイロードに存在すると仮定します)。

いずれの場合も、クリックされていないボタンのキーと値のペアは、リクエスト ペイロードから除外されます。これは非常に便利です。

この動作 (クリックされていないボタンのキーと値のペアが要求ペイロードから除外される) は標準ですか?

4

1 に答える 1

1

私の知る限り、はい。

HTML4 仕様から: http://www.w3.org/TR/1999/REC-html401-19991224/interact/forms.html#h-17.13.2

成功したすべてのコントロールには、送信されたフォーム データ セットの一部として、現在の値とペアになっているコントロール名があります。... フォームに複数の送信ボタンが含まれている場合、アクティブ化された送信ボタンのみが成功します。

HTML5 仕様から: http://www.w3.org/TR/2012/CR-html5-20121217/forms.html#the-button-element

注: ボタン (およびその値) は、フォームの送信を開始するためにボタン自体が使用された場合にのみ、フォームの送信に含まれます。

< IE8 は値の代わりに要素の内容を送信すると確信していますが (confirm=Confirm など)、他のほとんどの一般的なブラウザーは正しく動作するはずです。

おそらく考慮してください:

<form  method="post" action="http://example.com/submit/">
    <button name="submit-action" value="confirm" type="submit">Confirm</button>
    <button name="submit-action" value="re-send code" type="submit">Re-send code</button>
    <button name="submit-action" value="cancel change" type="submit">Cancel change</button>
</form>

また、一部の古いブラウザでは、ボタンがクリックされていないかのように処理される可能性があることに注意してください (たとえば、javascript によって送信されたフォームや、代わりにボタンを入力してください)。デフォルトで「確認」することで、これに対応する価値があるかもしれません。ただし、最新のブラウザーで HTML5 を使用しても問題はありません。

于 2013-06-24T04:34:35.300 に答える