Ich weiß, dass XHTML keine verschachtelten Formular-Tags unterstützt, und ich habe hier auf Stack Overflow bereits andere Antworten zu diesem Thema gelesen, aber ich habe immer noch keine elegante Lösung für das Problem gefunden.
Einige sagen, dass Sie es nicht brauchen und dass sie sich kein Szenario vorstellen können, in dem dies erforderlich wäre. Ich persönlich kann mir kein Szenario vorstellen, das ich nicht gebraucht habe.
Sehen wir uns ein sehr einfaches Beispiel an:
Sie erstellen eine Blog-App und haben ein Formular mit einigen Feldern zum Erstellen eines neuen Beitrags und eine Symbolleiste mit "Aktionen" wie "Speichern", "Löschen", "Abbrechen".
<form
action="/post/dispatch/too_bad_the_action_url_is_in_the_form_tag_even_though_conceptually_every_submit_button_inside_it_may_need_to_post_to_a_diffent_distinct_url"
method="post">
<input type="text" name="foo" /> <!-- several of those here -->
<div id="toolbar">
<input type="submit" name="save" value="Save" />
<input type="submit" name="delete" value="Delete" />
<a href="/home/index">Cancel</a>
</div>
</form>
Unser Ziel ist es, das Formular so zu schreiben, dass kein JavaScript erforderlich ist , sondern nur ein altes HTML-Formular und Schaltflächen zum Senden.
Da die Aktions-URL im Formular-Tag und nicht in jeder einzelnen Senden-Schaltfläche definiert ist, besteht unsere einzige Option darin, auf einer generischen URL zu posten und dann "if ... then ... else" zu starten, um den Namen der Schaltfläche zu bestimmen, die diese Schaltfläche enthält wurde übermittelt. Nicht sehr elegant, aber unsere einzige Wahl, da wir uns nicht auf JavaScript verlassen wollen.
Das einzige Problem ist, dass durch Drücken von "Löschen" ALLE Formularfelder auf dem Server gesendet werden, obwohl für diese Aktion nur eine ausgeblendete Eingabe mit der Post-ID erforderlich ist. In diesem kleinen Beispiel keine große Sache, aber ich habe Formulare mit Hunderten (sozusagen) Feldern und Registerkarten in meinen LOB- Anwendungen, die (aufgrund von Anforderungen) alles auf einmal einreichen müssen, und dies scheint auf jeden Fall sehr ineffizient zu sein und eine Verschwendung. Wenn die Formularverschachtelung unterstützt würde, könnte ich zumindest die Schaltfläche "Löschen" in einem eigenen Formular nur mit dem Feld "Post-ID" umschließen.
Sie können sagen "Implementieren Sie einfach" Löschen "als Link anstatt zu senden". Dies wäre in so vielen Ebenen falsch, aber am wichtigsten ist, dass Nebenwirkungen wie "Löschen" hier niemals eine GET-Anforderung sein sollten.
Meine Frage (insbesondere an diejenigen, die sagen, dass sie keine Formverschachtelung benötigen) lautet: Was machen SIE? Gibt es eine elegante Lösung, die mir fehlt, oder lautet das Fazit wirklich "Entweder JavaScript benötigen oder alles einreichen"?