XHTMLはネストされたフォームタグをサポートしていないことを知っており、この件に関してStack Overflowで他の回答をすでに読んでいますが、問題に対するエレガントな解決策はまだわかりません。
一部の人は、あなたはそれを必要とせず、これが必要とされるシナリオを考えることができないと言います。まあ、個人的には必要のないシナリオは思いつきません。
非常に簡単な例を見てみましょう:
あなたはブログアプリを作成していて、新しい投稿を作成するためのいくつかのフィールドと、「保存」、「削除」、「キャンセル」などの「アクション」を備えたツールバーを持つフォームがあります。
<form
action="/post/dispatch/too_bad_the_action_url_is_in_the_form_tag_even_though_conceptually_every_submit_button_inside_it_may_need_to_post_to_a_diffent_distinct_url"
method="post">
<input type="text" name="foo" /> <!-- several of those here -->
<div id="toolbar">
<input type="submit" name="save" value="Save" />
<input type="submit" name="delete" value="Delete" />
<a href="/home/index">Cancel</a>
</div>
</form>
私たちの目的は、JavaScriptを必要としない方法でフォームを記述することです。単純な古いHTMLフォームと送信ボタンだけです。
アクションURLは、個々の送信ボタンではなくFormタグで定義されているため、唯一のオプションは、汎用URLに投稿し、「if ... then ... else」を開始して、ボタンの名前を決定することです。提出されました。あまりエレガントではありませんが、JavaScriptに依存したくないため、唯一の選択肢です。
唯一の問題は、「削除」を押すと、このアクションに必要なのはpost-idの非表示入力だけであるにもかかわらず、サーバー上のすべてのフォームフィールドが送信されることです。この小さな例ではそれほど重要ではありませんが、私のLOBアプリケーションには何百もの(いわば)フィールドとタブがあり、(要件のため)一度にすべてを送信する必要があり、いずれにしてもこれは非常に非効率的ですそして廃棄物。フォームのネストがサポートされている場合、少なくとも「削除」送信ボタンを、フォームの内部にpost-idフィールドのみでラップできます。
「送信ではなく、リンクとして「削除」を実装するだけ」と言うことができます。これは多くのレベルで間違っていますが、最も重要なのは、ここでの「削除」のような副作用アクションは決してGETリクエストであってはならないためです。
だから私の質問(特に、フォームの入れ子は必要ないと言っている人たちへの質問)は、あなたは何をしますか?私が見逃しているエレガントな解決策はありますか、それとも最終的には「JavaScriptが必要か、すべてを送信するか」です。