Je sais que XHTML ne prend pas en charge les balises de formulaire imbriquées et j'ai déjà lu d'autres réponses ici sur Stack Overflow à ce sujet, mais je n'ai toujours pas trouvé de solution élégante au problème.
Certains disent que vous n'en avez pas besoin et qu'ils ne peuvent pas penser à un scénario où cela serait nécessaire. Eh bien, personnellement, je ne peux pas penser à un scénario dont je n'ai pas besoin.
Voyons un exemple très simple:
Vous créez une application de blog et vous avez un formulaire avec des champs pour créer un nouveau message et une barre d'outils avec des "actions" comme "Enregistrer", "Supprimer", "Annuler".
<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>
Notre objectif est d'écrire le formulaire d'une manière qui ne nécessite pas JavaScript , juste un vieux formulaire HTML et des boutons d'envoi.
Étant donné que l'URL d'action est définie dans la balise Form et non dans chaque bouton d'envoi individuel, notre seule option est de publier sur une URL générique, puis de commencer "si ... alors ... sinon" pour déterminer le nom du bouton qui a été soumis. Pas très élégant, mais notre seul choix, car nous ne voulons pas compter sur JavaScript.
Le seul problème est qu'en appuyant sur "Supprimer", tous les champs du formulaire seront soumis sur le serveur, même si la seule chose nécessaire pour cette action est une entrée cachée avec le post-id. Pas très grave dans ce petit exemple, mais j'ai des formulaires avec des centaines (pour ainsi dire) de champs et d'onglets dans mes applications LOB qui (en raison des exigences) doivent tout soumettre en une seule fois et en tout cas cela semble très inefficace et un gaspillage. Si l'imbrication des formulaires était prise en charge, je serais au moins capable d'envelopper le bouton de soumission «Supprimer» dans son propre formulaire avec uniquement le champ post-id.
Vous pouvez dire "Il suffit d'implémenter le" Supprimer "comme lien au lieu de soumettre". Ce serait faux à tant de niveaux, mais surtout parce que les actions à effet secondaire comme «Supprimer» ici, ne devraient jamais être une demande GET.
Donc ma question (en particulier à ceux qui disent qu'ils n'ont pas eu besoin d'imbrication de forme) est Que faites-vous? Y a-t-il une solution élégante qui me manque ou la ligne de fond est vraiment "soit exiger JavaScript ou tout soumettre"?