563 Stimmen

Können Sie HTML-Formulare verschachteln?

Ist es möglich, HTML-Formulare wie folgt zu verschachteln

<form name="mainForm">
  <form name="subForm">
  </form>
</form>

so dass beide Formen funktionieren? Mein Freund hat Probleme damit, ein Teil der subForm funktioniert, während ein anderer Teil nicht funktioniert.

33voto

roufamatic Punkte 17707

Wenn Sie AngularJS verwenden, kann jede <form> Tags innerhalb Ihr ng-app werden zur Laufzeit ersetzt durch ngForm Richtlinien, die für eine Verschachtelung vorgesehen sind.

In Angular können Formulare verschachtelt werden. Das bedeutet, dass das äußere Formular gültig ist, wenn alle untergeordneten Formulare ebenfalls gültig sind. Die Browser erlauben jedoch keine Verschachtelung von <form> Elemente, daher bietet Angular die ngForm die sich identisch verhält wie die Richtlinie <form> kann aber verschachtelt werden. Dies ermöglicht Ihnen verschachtelte Formulare, was sehr nützlich ist, wenn Sie Angular-Validierungsrichtlinien in Formularen verwenden, die dynamisch mit der ngRepeat Richtlinie. ( Quelle )

14voto

Pierre Punkte 4727

Eine andere Möglichkeit, dieses Problem zu umgehen, wenn Sie eine serverseitige Skriptsprache verwenden, mit der Sie die eingegebenen Daten manipulieren können, besteht darin, Ihr HTML-Formular wie folgt zu deklarieren:

<form>
<input name="a_name"/>
<input name="a_second_name"/>
<input name="subform[another_name]"/>
<input name="subform[another_second_name]"/>
</form>

Wenn Sie die geposteten Daten ausdrucken (ich verwende hier PHP), erhalten Sie ein Array wie dieses:

//print_r($_POST) will output :
    array(
    'a_name' => 'a_name_value',
    'a_second_name' => 'a_second_name_value',
    'subform' => array(
      'another_name' => 'a_name_value',
      'another_second_name' => 'another_second_name_value',
      ),
    );

Dann können Sie einfach etwas tun wie :

$my_sub_form_data = $_POST['subform'];
unset($_POST['subform']);

Ihr $_POST enthält jetzt nur noch die Daten Ihres "Hauptformulars", und die Daten Ihres Unterformulars sind in einer anderen Variablen gespeichert, die Sie nach Belieben manipulieren können.

Ich hoffe, das hilft!

13voto

Jonathan Lonowski Punkte 116832

Wie Craig schon sagte, nein.

Aber was Ihre Bemerkung über die warum :

Es könnte einfacher sein, 1 zu verwenden <form> mit den Eingaben und der Schaltfläche "Aktualisieren", und kopieren Sie versteckte Eingaben mit der Schaltfläche "Bestellung abschicken" in eine andere <form> .

10voto

Mark Peterson Punkte 570

Beachten Sie, dass es nicht erlaubt ist, FORM-Elemente zu verschachteln!

http://www.w3.org/MarkUp/html3/forms.html

https://www.w3.org/TR/html4/appendix/changes.html#h-A.3.9 (in der html4-Spezifikation sind keine Änderungen bezüglich der Verschachtelung von Formularen von 3.2 auf 4 vermerkt)

https://www.w3.org/TR/html4/appendix/changes.html#h-A.1.1.12 (in der html4-Spezifikation werden keine Änderungen hinsichtlich der Verschachtelung von Formularen von 4.0 auf 4.1 festgestellt)

https://www.w3.org/TR/html5-diff/ (in der html5-Spezifikation sind keine Änderungen bezüglich der Verschachtelung von Formularen von 4 auf 5 vermerkt)

https://www.w3.org/TR/html5/forms.html#association-of-controls-and-forms kommentiert "Diese Funktion ermöglicht es Autoren, die fehlende Unterstützung für verschachtelte Formularelemente zu umgehen", zitiert aber nicht, wo dies spezifiziert ist. Ich denke, sie gehen davon aus, dass wir annehmen sollten, dass es in der html3-Spezifikation spezifiziert ist :)

10voto

Chief Buddy Punkte 81

Sie können auch formaction="" innerhalb des Schaltflächen-Tags verwenden.

<button type="submit" formaction="/rmDog" method='post' id="rmDog">-</button>

Dies würde in das ursprüngliche Formular als separate Schaltfläche eingefügt werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X