Ist es möglich, HTML-Formulare wie dieses zu verschachteln?
<form name="mainForm">
<form name="subForm">
</form>
</form>
damit beide Formen funktionieren? Mein Freund hat Probleme damit, ein Teil der subForm
Arbeiten, während ein anderer Teil dies nicht tut.
html
nested-forms
Levi
quelle
quelle
Antworten:
Mit einem Wort, nein. Sie können mehrere Formulare auf einer Seite haben, diese sollten jedoch nicht verschachtelt sein.
Aus dem HTML5-Arbeitsentwurf :
quelle
Ich bin auf ein ähnliches Problem gestoßen, und ich weiß, dass dies keine Antwort auf die Frage ist, aber es kann für jemanden mit dieser Art von Problem hilfreich sein:
Wenn die Elemente von zwei oder mehr Formen in eine bestimmte Reihenfolge gebracht werden müssen kann das HTML5-
<input> form
Attribut die Lösung sein.Von http://www.w3schools.com/tags/att_input_form.asp :
Szenario :
Implementierung :
Hier finden Sie die Kompatibilität des Browsers.
quelle
<input type="submit"
mit seinem verknüpft ist,<form>
das ein angibtaction
, werden die<input />
mit demselben verknüpften<form>
in dieser Anfrage verwendetDas zweite Formular wird ignoriert. Siehe das Snippet aus WebKit zum Beispiel:
quelle
Normales HTML kann dies nicht zulassen. Aber mit Javascript können Sie das tun. Wenn Sie Javascript / jquery verwenden, können Sie Ihre Formularelemente mit einer Klasse klassifizieren und dann mit serialize () nur die Formularelemente für die Teilmenge der Elemente serialisieren, die Sie senden möchten.
Dann könnten Sie dies in Ihrem Javascript tun, um Elemente der Klasse 1 zu serialisieren
Für Klasse 2 könnten Sie tun
Für die ganze Form
oder einfach
quelle
Wenn Sie AngularJS verwenden, werden alle
<form>
Tags in Ihremng-app
zur Laufzeit durchngForm
Anweisungen ersetzt, die verschachtelt werden sollen.quelle
Da es 2019 ist, möchte ich eine aktualisierte Antwort auf diese Frage geben. Es ist möglich, dasselbe Ergebnis wie bei verschachtelten Formularen zu erzielen, ohne sie jedoch zu verschachteln. HTML5 führte das Formularattribut ein. Sie können das Formularattribut Formularsteuerelementen außerhalb eines Formulars hinzufügen, um sie mit einem bestimmten Formularelement (nach ID) zu verknüpfen.
https://www.impressivewebs.com/html5-form-attribute/
Auf diese Weise können Sie Ihr HTML wie folgt strukturieren:
Das Formularattribut wird von allen modernen Browsern unterstützt. IE unterstützt dies zwar nicht, aber IE ist kein Browser mehr, sondern ein Kompatibilitätstool, wie von Microsoft selbst bestätigt: https://www.zdnet.com/article/microsoft-security-chief-ie-is-not-a -browser-so-hör-auf-es-als-dein-Standard zu verwenden / . Es ist an der Zeit, dass wir uns nicht mehr darum kümmern, dass die Dinge im IE funktionieren.
https://caniuse.com/#feat=form-attribute
https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#attr-fae-form
Aus der HTML-Spezifikation:
quelle
Eine andere Möglichkeit, dieses Problem zu umgehen, wenn Sie eine serverseitige Skriptsprache verwenden, mit der Sie die veröffentlichten Daten bearbeiten können, besteht darin, Ihr HTML-Formular wie folgt zu deklarieren:
Wenn Sie die veröffentlichten Daten drucken (ich werde hier PHP verwenden), erhalten Sie ein Array wie das folgende:
Dann können Sie einfach so etwas tun wie:
Ihr $ _POST enthält jetzt nur noch Ihre "Hauptformular" -Daten, und Ihre Unterformulardaten werden in einer anderen Variablen gespeichert, die Sie nach Belieben bearbeiten können.
Hoffe das hilft!
quelle
Wie Craig sagte, nein.
Aber in Bezug auf Ihren Kommentar, warum :
Es ist möglicherweise einfacher, 1
<form>
mit den Eingaben und der Schaltfläche "Aktualisieren" zu verwenden und versteckte Eingaben mit der Schaltfläche "Bestellung senden" in einer anderen zu kopieren<form>
.quelle
http://www.w3.org/MarkUp/html3/forms.html
https://www.w3.org/TR/html4/appendix/changes.html#hA.3.9 (HTML4-Spezifikation stellt keine Änderungen in Bezug auf Verschachtelungsformen von 3.2 auf 4 fest)
https://www.w3.org/TR/html4/appendix/changes.html#hA.1.1.12 (HTML4-Spezifikation stellt keine Änderungen bezüglich Verschachtelungsformen von 4.0 auf 4.1 fest)
https://www.w3.org/TR/html5-diff/ (HTML5-Spezifikation stellt keine Änderungen in Bezug auf Verschachtelungsformen von 4 bis 5 fest)
https://www.w3.org/TR/html5/forms.html#association-of-controls-and-forms Kommentare zu "Mit dieser Funktion können Autoren die mangelnde Unterstützung für verschachtelte Formularelemente umgehen." nicht zitieren, wo dies angegeben ist, ich denke, sie gehen davon aus, dass wir davon ausgehen sollten, dass es in der HTML3-Spezifikation angegeben ist :)
quelle
Eine einfache Problemumgehung besteht darin, einen Iframe zu verwenden, um das "verschachtelte" Formular zu speichern. Visuell ist das Formular verschachtelt, aber auf der Codeseite befindet es sich insgesamt in einer separaten HTML-Datei.
quelle
Sie können auch formaction = "" innerhalb des Schaltflächen-Tags verwenden.
Dies würde im Originalformular als separate Schaltfläche verschachtelt.
quelle
Selbst wenn Sie es in einem Browser zum Laufen bringen könnten, gibt es keine Garantie dafür, dass es in allen Browsern gleich funktioniert. So , während Sie in der Lage sein könnte , um es zu arbeiten , einige der Zeit, würden Sie sicherlich nicht in der Lage sein , es zu bekommen zu arbeiten alle der Zeit.
quelle
Sie hätten sogar Probleme damit, dass es in verschiedenen Versionen desselben Browsers funktioniert. Vermeiden Sie es also, das zu benutzen.
quelle
Ich präsentiere zwar keine Lösung für verschachtelte Formulare (sie funktioniert nicht zuverlässig), aber ich präsentiere eine Problemumgehung, die für mich funktioniert:
Verwendungsszenario: Eine Superform, mit der N Elemente gleichzeitig geändert werden können. Es hat eine Schaltfläche "Alle senden" am unteren Rand. Jedes Element möchte ein eigenes verschachteltes Formular mit der Schaltfläche "Artikel Nr. N senden" haben. Aber kann nicht ...
In diesem Fall kann man tatsächlich ein einzelnes Formular verwenden und dann den Namen der Schaltflächen haben
submit_1
..submit_N
undsubmitAll
es serverseitig behandeln, indem man nur Parameter betrachtet, die auf enden,_1
wenn der Name der Schaltfläche warsubmit_1
.Ok, also keine große Erfindung, aber es macht den Job.
quelle
Informationen zum Verschachteln von Formularen: Ich habe an einem Nachmittag 10 Jahre lang versucht, ein Ajax-Skript zu debuggen.
Meine vorherige Antwort / mein vorheriges Beispiel hat das HTML-Markup leider nicht berücksichtigt.
form_2 hat ständig versagt, ungültiges form_2 zu sagen.
Als ich den ajaxContainer verschoben habe, der form_2
<i>outside</i>
von form_1 erzeugt hat, war ich wieder im Geschäft. Es ist die Antwort auf die Frage, warum man Formen verschachteln könnte. Ich meine wirklich, wofür ist die ID, wenn nicht definiert werden soll, welches Formular verwendet werden soll? Es muss eine bessere, schlankere Lösung geben.quelle
Verwenden Sie ein leeres Formular-Tag vor Ihrem verschachtelten Formular
Getestet und gearbeitet auf Firefox, Chrome
Nicht im IE getestet
quelle
Obwohl die Frage ziemlich alt ist und ich mit @jeder übereinstimme, ist das Verschachteln von Formularen in HTML nicht zulässig
Aber das ist etwas, was alle vielleicht sehen wollen
wo Sie HTML hacken können (ich nenne es einen Hack, da ich sicher bin, dass dies nicht legitim ist), damit der Browser eine verschachtelte Form hat
JS FIDDLE LINK
http://jsfiddle.net/nzkEw/10/
quelle
Nein, Sie können kein verschachteltes Formular haben. Stattdessen können Sie ein Modal öffnen, das ein Formular enthält, und das Senden eines Ajax-Formulars durchführen.
quelle
Wirklich nicht möglich ... Ich konnte keine Formular-Tags verschachteln ... Ich habe jedoch diesen Code verwendet:
mit
{% csrf_token %}
und sound einige JS angewendet
quelle
Heute bin ich auch in demselben Problem stecken geblieben und habe das Problem behoben, bei dem ich ein Benutzersteuerelement hinzugefügt habe, und
auf diesem Steuerelement verwende ich diesen Code
Rufen Sie beim PreRenderComplete-Ereignis der Seite diese Methode auf
Ich glaube, das wird helfen.
quelle
Bevor ich wusste, dass ich das nicht tun sollte, hatte ich verschachtelte Formulare, um mehrere Senden-Schaltflächen zu haben. Lief 18 Monate lang so, Tausende von Anmeldetransaktionen, niemand rief uns wegen irgendwelcher Schwierigkeiten an.
Verschachtelte Formulare gaben mir einen Ausweis zum Analysieren, damit die richtige Aktion ausgeführt werden konnte. Brach nicht, bis ich versuchte, ein Feld an eine der Schaltflächen anzuhängen, und Validate beschwerte sich. Es war keine große Sache, es zu entwirren - ich habe eine explizite Zeichenfolge für das äußere Formular verwendet, sodass es keine Rolle spielte, ob das Senden und das Formular nicht übereinstimmten. Ja, ja, hätte die Schaltflächen von einem Submit zu einem Onclick nehmen sollen.
Punkt ist, dass es Umstände gibt, unter denen es nicht ganz kaputt ist. Aber "nicht ganz kaputt" ist vielleicht ein zu niedriger Standard, um zu schießen :-)
quelle