別のフォーム内にフォームを配置できるかどうか。それに問題はありますか。
1つのHTMLページに複数の<form>
要素を含めることができますが、それらをネストすることはできません。
フォームのネストは、新しいHTML5 input要素のフォーム属性で実現できます。フォームを構造的にネストするわけではありませんが、入力は独自のフォームであると評価されます。私のテストでは、IE(IE11)を除く3つの主要なブラウザーがこれをサポートしています。フォームのネストの制限は、HTML UI設計の大きな障害でした。
以下にサンプルコードを示します。[保存]ボタンをクリックすると、「2 3成功」が表示されます(元の http://www.impressivewebs.com/html5-form-attribute/ ):
<form id="saveForm" action="/post/dispatch/save" method="post"></form>
<form id="deleteForm" action="/post/dispatch/delete" method="post"></form>
<div id="toolbar">
<input type="text" name="foo" form="saveForm" />
<input type="hidden" value="some_id" form="deleteForm" />
<input type="text" name="foo2" id="foo2" form="saveForm" value="success" />
<input type="submit" name="save" value="Save" form="saveForm" onclick="alert(document.getElementById('deleteForm').elements.length + ' ' + document.getElementById('saveForm').elements.length + ' ' + document.getElementById('saveForm').elements['foo2'].value);return false;" />
<input type="submit" name="delete" value="Delete" form="deleteForm" />
<a href="/home/index">Cancel</a>
</div>
いいえ。HTMLはネストされたフォームを明示的に禁止します。
HTML 5ドラフト から:
コンテンツモデル:フローコンテンツ。ただし、フォーム要素の子孫はありません。
HTML 4.01勧告 から:
<!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM) -- interactive form -->
(-(FORM)セクションに注意してください)。
ネストされたフォームはサポートされておらず、w3c標準の一部ではありません(多くの人が述べているように)。
ただし、HTML5では、フォームの子孫である必要はありませんが、「form」属性を使用して複数のフォームで送信できる入力のサポートが追加されています。これは、ネストされたフォームを正確に許可しませんが、このメソッドを使用することにより、ネストされたフォームをシミュレートできます。
「フォーム」属性の値はフォームのIDである必要があります。複数のフォームの場合は、フォームIDをスペースで区切ります。
もっと読むことができます こちら
マスターフォームがあり、「フォームのあるフォーム」を使用するように強制されている場合、次の操作を実行できます。
リンクボタンを送信するフォームポストの例:
フォームの代わりに...入力をdivにラップします:
<div id="gap_form"><input type="hidden" name="PostVar"/><a id="myLink" href="javascript:Form2.submit()">A Link</a></div>
jsファイル:
$(document).ready(function () {
(function () {
$('#gap_form').wrap('<form id="Form2" action="http://sitetopostto.com/postpage" method="post" target="_blank"></form>');
})();});
これは、フォーム内のdiv "gap_form"内のすべてを即座にラップし、リンクはそのフォームを送信します。私は今、このページで作業している正確な例を持っています...(私の例では、新しいページにリダイレクトし、そのページでフォームを送信することで同じことを達成できます...
はいあります。間違っています。それが間違っているために動作しません。ほとんどのブラウザには1つのフォームしか表示されません。
別の回避策は、独自のフォームを含むモーダルウィンドウを開始することです
ネストされたフォームを持つ必要があるのは有効なXHTMLではありません。ただし、複数の送信ボタンを使用し、サーバーサイドスクリプトを使用して、ユーザーがクリックしたボタンに応じて異なるコードを実行できます。
このような別のフォーム内にフォームをネストすることはできません
<form name='form1'>
<form name='form2'>
//some code here
</form>
</form>
場合によっては機能しますが、ユニバーサルプラットフォームにはお勧めしません。 1つのフォーム内で多数のSUBMITボタンを使用できますが、ネストされたフォームを適切に管理することはできません。