web-dev-qa-db-fra.com

Formulaire dans un formulaire, est-ce que ça va?

Si nous pouvons avoir une forme dans une autre forme? Y at-il un problème avec cela.

169
Rajasekar

Bien que vous puissiez avoir plusieurs éléments <form> dans une même page HTML, vous ne pouvez pas les imbriquer.

215
Oded

L'imbrication de formulaire peut être réalisée avec l'attribut de formulaire du nouvel élément d'entrée HTML5. Bien que les formes ne soient pas imbriquées de manière structurelle, les entrées sont évaluées telles quelles. Dans mes tests, 3 principaux navigateurs supportent cela sauf IE (IE11). La limitation d'imbrication de formulaires était un obstacle majeur pour la conception d'interface utilisateur HTML.

Voici un exemple de code. Lorsque vous cliquez sur le bouton Enregistrer, vous devriez voir "2 3 succès" (Original http://www.impressivewebs.com/html5-form-attribute/ ):

<form id="saveForm" action="/post/dispatch/save" method="post"></form>
<form id="deleteForm" action="/post/dispatch/delete" method="post"></form>

<div id="toolbar">
    <input type="text" name="foo" form="saveForm" />
    <input type="hidden" value="some_id" form="deleteForm" />
    <input type="text" name="foo2" id="foo2" form="saveForm" value="success" />

    <input type="submit" name="save" value="Save" form="saveForm" onclick="alert(document.getElementById('deleteForm').elements.length + ' ' + document.getElementById('saveForm').elements.length + ' ' + document.getElementById('saveForm').elements['foo2'].value);return false;" />
    <input type="submit" name="delete" value="Delete" form="deleteForm" />
    <a href="/home/index">Cancel</a>
</div>
100
ilevent

Non. HTML interdit explicitement les formulaires imbriqués.

À partir du HTML 5 draft :

Modèle de contenu: contenu du flux, mais sans descendants d'éléments de formulaire.

De la recommandation HTML 4.01 :

<!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM) -- interactive form -->

(Notez la section - (FORM)).

75
Quentin

Les formulaires imbriqués ne sont pas pris en charge et ne font pas partie de la norme W3C (comme beaucoup d’entre vous l’ont indiqué).

Cependant, HTML5 ajoute la prise en charge des entrées qui ne doivent pas nécessairement être des descendants de n'importe quel formulaire, mais peuvent être soumises sous plusieurs formulaires - en utilisant l'attribut "formulaire". Cela ne permet pas exactement les formulaires imbriqués, mais en utilisant cette méthode, vous pouvez simuler des formulaires imbriqués.

La valeur de l'attribut "formulaire" doit être l'id du formulaire ou, dans le cas de formulaires multiples, séparer les identificateurs de formulaire avec de l'espace.

Vous pouvez en lire plus ici

9
user3007766

Si vous avez un formulaire principal et que vous êtes obligé d'avoir un "formulaire avec un formulaire", voici ce que vous pouvez faire ... Dans mon cas, j'avais un lien dans le globalHeader et je voulais effectuer un post quand il a été cliqué:

Exemple de formulaire de publication avec bouton de lien soumettre:

Au lieu d'un formulaire ... envelopper votre entrée dans un div:

 <div id="gap_form"><input type="hidden" name="PostVar"/><a id="myLink" href="javascript:Form2.submit()">A Link</a></div>

fichier js:

$(document).ready(function () {
(function () {
    $('#gap_form').wrap('<form id="Form2" action="http://sitetopostto.com/postpage" method="post" target="_blank"></form>');
})();});

Cela engloberait tout ce qui se trouve dans la div "gap_form" dans un formulaire à la volée et le lien le soumettrait. J'ai exactement cet exemple qui fonctionne sur une page maintenant ... (Dans mon exemple ... Vous pouvez accomplir la même chose en redirigeant vers une nouvelle page et en soumettant le formulaire sur cette page ... mais j'aime mieux cela.)

8
Ben Call

Oui il y a. Il est faux. Cela ne fonctionnera pas parce que c'est faux. La plupart des navigateurs ne verront qu'un seul formulaire.

http://www.w3.org/MarkUp/html3/forms.html

4
AlexanderMP

Une autre solution consiste à lancer une fenêtre modale contenant son propre formulaire.

4
manuchap

Ce n'est pas valide XHTML d'avoir à avoir des formulaires imbriqués. Cependant, vous pouvez utiliser plusieurs boutons de soumission et utiliser un script côté serveur pour exécuter des codes différents en fonction du bouton sur lequel l'utilisateur a cliqué.

3
Martin LeBlanc

Non, nous ne pouvons pas imbriquer des formulaires dans un autre formulaire comme celui-ci.

<form name='form1'>
      <form name='form2'>
            //some code here
      </form>
</form>

cela fonctionnera dans certains cas, mais ce n’est pas recommandé pour les plates-formes universelles. Vous pouvez utiliser de nombreux boutons SOUMETTRE dans un seul formulaire, mais vous ne pouvez pas gérer un formulaire imbriqué correctement.

3
Gautam3164