358 votes

Est-il possible d'avoir un formulaire html à l'intérieur d'un autre formulaire html ?

Est-ce que c'est du html valide d'avoir le suivant :

<form action="a">
    <input.../>
    <form action="b">
        <input.../>
        <input.../>
        <input.../>
    </form>
    <input.../>
</form>

Ainsi, lorsque vous soumettez "b", vous obtenez uniquement les champs du formulaire interne. Lorsque vous soumettez "a", vous obtenez tous les champs, sauf ceux du formulaire "b".

Si ce n'est pas possible, quelles sont les solutions de rechange disponibles pour cette situation ?

413voto

GeneQ Points 2885

A. Ce n'est pas un HTML valide ni un XHTML

Dans la spécification officielle XHTML du W3C, la section B. "Prohibitions d'éléments", stipule que :

"form must not contain other form elements."

http://www.w3.org/TR/xhtml1/#prohibitions

Quant aux plus anciens Spécification HTML 3.2 , la section sur l'élément FORMS indique que :

"Chaque formulaire doit être inclus dans un élément élément FORM. Il peut y avoir plusieurs formulaires dans un même document, mais l'élément FORM ne peut pas être imbriqué."

B. La solution de rechange

Cependant, quelqu'un a déjà essayé de le faire :

"Comment créer un formulaire imbriqué".

http://blog.avirtualhome.com/how-to-create-nested-forms/

Note : Bien qu'il soit possible de tromper les validateurs du W3C pour qu'ils acceptent une page en manipulant le DOM via un script, il ne s'agit toujours pas de HTML légal. Le problème avec l'utilisation de telles approches est que le comportement de votre code n'est pas garanti à travers les navigateurs. (puisque ce n'est pas un standard)

58voto

Andreas Points 345

Au cas où quelqu'un trouverait cet article, voici une excellente solution sans avoir besoin de JS. Utilisez deux boutons d'envoi avec des attributs de nom différents. Vérifiez dans la langue de votre serveur quel bouton d'envoi a été pressé, car un seul d'entre eux sera envoyé au serveur.

<form method="post" action="ServerFileToExecute.php">
    <input type="submit" name="save" value="Click here to save" />
    <input type="submit" name="delete" value="Click here to delete" />
</form>

Le côté serveur pourrait ressembler à ceci si vous utilisez php :

<?php
    if(isset($_POST['save']))
        echo "Stored!";
    else if(isset($_POST['delete']))
        echo "Deleted!";
    else
        echo "Action is missing!";

30voto

Nishi Points 3515

HTML 4.x et HTML5 interdisent les formulaires imbriqués, mais HTML5 permet une solution de contournement avec l'attribut "form" ("form owner").

Quant à HTML 4.x, vous pouvez le faire :

  1. Utilisez un ou plusieurs formulaires supplémentaires avec uniquement des champs cachés et du JavaScript pour définir ses entrées et soumettre le formulaire.
  2. Utiliser les CSS pour aligner plusieurs formulaires HTML afin qu'ils ressemblent à une seule entité - mais je pense que c'est trop difficile.

15voto

user64075 Points 253

Comme d'autres l'ont dit, ce n'est pas du HTML valide.

On dirait que vous faites cela pour positionner visuellement les formulaires les uns dans les autres. Si c'est le cas, il suffit de créer deux formulaires distincts et d'utiliser une feuille de style CSS pour les positionner.

8voto

David Grant Points 8477

Non, la spécification HTML indique qu'une FORM ne peut pas en contenir un autre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X