このようなhtmlフォームをネストすることは可能ですか
<form name="mainForm">
<form name="subForm">
</form>
</form>
両方の形式が機能するように?私の友人は、作品の一部に問題を抱えていますが、subForm
別の部分には問題がありません。
このようなhtmlフォームをネストすることは可能ですか
<form name="mainForm">
<form name="subForm">
</form>
</form>
両方の形式が機能するように?私の友人は、作品の一部に問題を抱えていますが、subForm
別の部分には問題がありません。
一言で言えば、いいえ。1 つのページに複数のフォームを含めることができますが、入れ子にしないでください。
4.10.3
form
要素コンテンツ モデル:
コンテンツをフローしますが、フォーム要素の子孫はありません。
HTML5 <input> form
属性が解決策になる可能性があります。http://www.w3schools.com/tags/att_input_form.asp
から:
- form属性は HTML5 で新しく追加されました。
- 要素が属する
<form>
要素を指定します。<input>
この属性の値は<form>
、同じドキュメント内の要素の id 属性である必要があります。
シナリオ:
実装:
<form id="Form1" action="Action1.php" method="post"></form>
<form id="Form2" action="Action2.php" method="post"></form>
<input type="text" name="input_Form1_n1" form="Form1" />
<input type="text" name="input_Form2_n1" form="Form2" />
<input type="text" name="input_Form1_n2" form="Form1" />
<input type="text" name="input_Form2_n2" form="Form2" />
<input type="submit" name="button1" value="buttonVal1" form="Form1" />
<input type="submit" name="button2" value="buttonVal2" form="Form2" />
ここでは、ブラウザの互換性を確認できます。
2 番目のフォームは無視されます。たとえば、WebKitのスニペットを参照してください。
bool HTMLParser::formCreateErrorCheck(Token* t, RefPtr<Node>& result)
{
// Only create a new form if we're not already inside one.
// This is consistent with other browsers' behavior.
if (!m_currentFormElement) {
m_currentFormElement = new HTMLFormElement(formTag, m_document);
result = m_currentFormElement;
pCloserCreateErrorCheck(t, result);
}
return false;
}
プレーンな html では、これを行うことはできません。しかし、javascript を使えばそれが可能です。javascript/jquery を使用している場合は、フォーム要素をクラスで分類し、serialize() を使用して、送信するアイテムのサブセットのフォーム要素のみをシリアル化できます。
<form id="formid">
<input type="text" class="class1" />
<input type="text" class="class2">
</form>
次に、JavaScriptでこれを実行して、class1要素をシリアル化できます
$(".class1").serialize();
class2 の場合、次のことができます
$(".class2").serialize();
フォーム全体に
$("#formid").serialize();
または単に
$("#formid").submit();
AngularJS を使用している場合、<form>
内部のタグはすべて、実行時に入れ子になるように設計されたディレクティブにng-app
置き換えられます。ngForm
Angular フォームではネストできます。これは、すべての子フォームも有効な場合に、外側のフォームが有効であることを意味します。
<form>
ただし、ブラウザは要素のネストを許可していないため、Angular は と同じように動作するがネストできるngForm
ディレクティブを提供します。<form>
これにより、ネストされたフォームを持つことができます。これは、ディレクティブを使用して動的に生成されるフォームで Angular 検証ディレクティブを使用する場合に非常に便利ですngRepeat
。(ソース)
クレイグが言ったように、いいえ。
しかし、理由についてのあなたのコメントに関して:
<form>
入力と「更新」ボタンで 1 を使用し、別の で「注文を送信」ボタンで非表示の入力をコピーして使用する方が簡単かもしれません<form>
。
FORM 要素をネストすることは許可されていないことに注意してください。
http://www.w3.org/MarkUp/html3/forms.html
https://www.w3.org/TR/html4/appendix/changes.html#hA.3.9 (html4 仕様では、3.2 から 4 へのネストフォームに関する変更はありません)
https://www.w3.org/TR/html4/appendix/changes.html#hA.1.1.12 (html4 仕様では、4.0 から 4.1 へのネスト フォームに関する変更はありません)
https://www.w3.org/TR/html5-diff/ (html5 仕様では、フォーム 4 から 5 へのネストに関する変更はありません)
https://www.w3.org/TR/html5/forms.html#association-of-controls-and-formsは、「この機能により、作成者はネストされたフォーム要素のサポートの欠如を回避できます。」とコメントしていますが、これが指定されている場所を引用しないでください。html3仕様で指定されていると想定する必要があると想定していると思います:)
簡単な回避策は、iframe を使用して「ネストされた」フォームを保持することです。視覚的にはフォームはネストされていますが、コード側では完全に別の html ファイルになっています。
1つのブラウザで動作させることができたとしても、すべてのブラウザで同じように動作するという保証はありません。したがって、いつかは動作させることができるかもしれませんが、常に動作させることはできません。
ネストされたフォームの解決策は提示しませんが (確実には機能しません)、私にとって有効な回避策を提示します。
使用シナリオ: 一度に N 個のアイテムを変更できるスーパーフォーム。下部に「すべて送信」ボタンがあります。各アイテムには、「Submit Item # N」ボタンを備えた独自のネストされたフォームが必要です。しかし、できません...
この場合、実際には 1 つのフォームを使用し、ボタンの名前をsubmit_1
..submit_N
にしsubmitAll
て、サーバー側で処理できます。ボタンの名前_1
が..submit_1
<form>
<div id="item1">
<input type="text" name="foo_1" value="23">
<input type="submit" name="submit_1" value="Submit Item #1">
</div>
<div id="item2">
<input type="text" name="foo_2" value="33">
<input type="submit" name="submit_2" value="Submit Item #2">
</div>
<input type="submit" name="submitAll" value="Submit All Items">
</form>
わかりました、それほど発明ではありませんが、それは仕事をします.
フォームのネストについて: ある日の午後、ajax スクリプトのデバッグに 10 年間費やしました。
私の以前の回答/例は、html マークアップを考慮していませんでした。申し訳ありません。
<form id='form_1' et al>
<input stuff>
<submit onClick='ajaxFunction(That_Puts_form_2_In_The_ajaxContainer)' >
<td id='ajaxContainer></td>
</form>
form_2 は無効な form_2 と言って常に失敗しました。
form_1 のform_2 を生成した ajaxContainer を移動したところ、元<i>outside</i>
に戻りました。なぜフォームをネストするのかという質問に答えます。つまり、使用するフォームを定義しない場合の ID は何ですか? より優れた、より洗練された回避策が必要です。
質問はかなり古いですが、フォームのネストはHTMLでは許可されていないという@everyoneに同意します
しかし、これは誰もがこれを見たいと思うかもしれません
ブラウザがネストされたフォームを持つことを許可するためのhtmlをハックできる場所(これは正当ではないと確信しているので、ハックと呼んでいます)
<form id="form_one" action="http://apple.com">
<div>
<div>
<form id="form_two" action="/">
<!-- DUMMY FORM TO ALLOW BROWSER TO ACCEPT NESTED FORM -->
</form>
</div>
<br/>
<div>
<form id="form_three" action="http://www.linuxtopia.org/">
<input type='submit' value='LINUX TOPIA'/>
</form>
</div>
<br/>
<div>
<form id="form_four" action="http://bing.com">
<input type='submit' value='BING'/>
</form>
</div>
<br/>
<input type='submit' value='Apple'/>
</div>
</form>
JSフィドルリンク