Ist es gültig, HTML zu haben, um Folgendes zu haben:
<form action="a">
<input.../>
<form action="b">
<input.../>
<input.../>
<input.../>
</form>
<input.../>
</form>
Wenn Sie also "b" einreichen, erhalten Sie nur die Felder innerhalb der inneren Form. Wenn Sie "a" einreichen, erhalten Sie alle Felder abzüglich der Felder in "b".
Welche Problemumgehungen sind für diese Situation verfügbar, wenn dies nicht möglich ist?
html
web-standards
standards-compliance
allyourcode
quelle
quelle
Antworten:
A. Es ist weder HTML noch XHTML gültig
In der offiziellen W3C XHTML-Spezifikation heißt es in Abschnitt B. "Elementverbote":
http://www.w3.org/TR/xhtml1/#prohibitions
In Bezug auf die ältere HTML 3.2-Spezifikation heißt es im Abschnitt über das FORMS-Element:
B. Die Problemumgehung
Es gibt Problemumgehungen mit JavaScript, ohne dass Formular-Tags verschachtelt werden müssen.
"So erstellen Sie ein verschachteltes Formular." (Trotz des Titels handelt es sich nicht um verschachtelte Formular-Tags, sondern um eine JavaScript-Problemumgehung.)
Antworten auf diese StackOverflow-Frage
Hinweis: Obwohl man die W3C-Validatoren dazu bringen kann, eine Seite zu übergeben, indem man das DOM per Skript manipuliert, ist es immer noch kein legaler HTML-Code. Das Problem bei der Verwendung solcher Ansätze besteht darin, dass das Verhalten Ihres Codes jetzt nicht für alle Browser garantiert ist. (da es nicht Standard ist)
quelle
Für den Fall, dass jemand diesen Beitrag hier findet, ist dies eine großartige Lösung, ohne dass JS erforderlich ist. Verwenden Sie zwei Senden-Schaltflächen mit unterschiedlichen Namensattributen. Überprüfen Sie in Ihrer Serversprache, welche Senden-Schaltfläche gedrückt wurde, da nur eine davon an den Server gesendet wird.
Die Serverseite könnte ungefähr so aussehen, wenn Sie PHP verwenden:
quelle
HTML 4.x und HTML5 verbieten verschachtelte Formulare, HTML5 ermöglicht jedoch eine Problemumgehung mit dem Attribut "form" ("Formulareigentümer").
Für HTML 4.x können Sie:
quelle
Wie andere gesagt haben, ist es kein gültiges HTML.
Es hört sich so an, als würden Sie dies tun, um die Formulare visuell ineinander zu positionieren. Wenn dies der Fall ist, führen Sie einfach zwei separate Formulare aus und positionieren Sie sie mithilfe von CSS.
quelle
Nein, die HTML-Spezifikation besagt, dass kein
FORM
Element ein anderesFORM
Element enthalten soll .quelle
Sie können Ihre eigene Frage sehr einfach beantworten, indem Sie den HTML-Code in den W3-Validator eingeben . (Es verfügt über ein Texteingabefeld, Sie müssen nicht einmal Ihren Code auf einem Server ablegen ...)
(Und nein, es wird nicht validiert.)
quelle
Verwenden Sie lieber eine benutzerdefinierte Javascript-Methode im Aktionsattribut des Formulars!
z.B
quelle
Eine Möglichkeit besteht darin, einen Iframe innerhalb der äußeren Form zu haben. Der Iframe enthält die innere Form. Stellen Sie sicher, dass Sie das
<base target="_parent" />
Tag im head-Tag des iframe verwenden, damit sich das Formular als Teil der Hauptseite verhält.quelle
nein, siehe w3c
quelle
Nein, es ist nicht gültig. Eine "Lösung" kann jedoch darin bestehen, ein modales Fenster außerhalb des Formulars "a" zu erstellen, das das Formular "b" enthält.
Dies ist einfach möglich, wenn Sie Bootstrap verwenden oder CSS materialisieren. Ich mache das, um die Verwendung von Iframe zu vermeiden.
quelle
Eine Nicht-JavaScript-Problemumgehung zum Verschachteln von Formular-Tags:
Weil du es zulässt
Wenn Sie "a" senden, funktioniert Folgendes mit normalen Webformularen ohne ausgefallene JavaScript-Tricks:
Schritt 1. Platzieren Sie jedes Formular auf einer eigenen Webseite.
Schritt 2. Fügen Sie an jeder Stelle, an der dieses Unterformular angezeigt werden soll, einen Iframe ein.
Schritt 3. Gewinn.
Ich habe versucht, eine Code-Playground-Website zu verwenden, um eine Demo zu zeigen, aber viele von ihnen verbieten das Einbetten ihrer Websites in Iframes, selbst innerhalb ihrer eigenen Domain.
quelle
Wenn Sie Ihr Formular zum Senden / Festschreiben von Daten an eine relationale 1: M-Datenbank benötigen, würde ich empfehlen, einen DB-Trigger "nach dem Einfügen" in Tabelle A zu erstellen, der die erforderlichen Daten für Tabelle B einfügt.
quelle
Nein, es ist nicht gültig, aber Sie können Ihre innere Formposition auf der
HTML
mit HilfeCSS
undjQuery
Verwendung austricksen. Erstellen Sie zuerst ein Container-Div in Ihrem übergeordneten Formular und dann an einer anderen Stelle auf der Seite das Div mit Ihrem untergeordneten (inneren) Formular:....
Geben Sie Ihrem Container div eine stabile Wärme
Dank Trick die "other_form" Position relativ zu Container Div.
PS: Du musst mit Zahlen spielen, damit es schön aussieht.
quelle