2010-08-07 27 views
140

Si podemos tener un formulario dentro de otra forma ?. ¿Hay algún problema con eso?Formulario dentro de un formulario, ¿está bien?

+2

A pesar de que no se pidió por OP, [aquí está] (http: // stackoverflow .com/a/10833860/239527) una solución adecuada para tener varios botones dentro de una forma. –

Respuesta

179

Aunque puede tener varios elementos <form> en una página HTML, no puede anidarlos.

4

Sí, sí. Está mal. No funcionará porque está mal. La mayoría de los navegadores solo verán una forma.

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

+4

La especificación de HTML 3 no es muy buena para vincularla: murió sin alcanzar el estado de Recomendación. – Quentin

+1

¿Por qué vincular a una especificación anterior? El Html 3.0? Hay especificaciones más recientes ... – Oded

+0

Este es el único que especifica al principio de la descripción sobre esta interdicción (y uno de los primeros resultados de Búsqueda de Google). En otros casos, solo he visto discusiones en foros sobre HTML4 y XHTML que conducen a los mismos resultados. Una publicación en el foro incluso dijo algo acerca de que HTML4 permite esto, aunque nunca escuché sobre él y no pude encontrar ningún ejemplo o prueba. – AlexanderMP

73

No. HTML prohíbe explícitamente formas anidadas.

Desde el HTML 5 draft:

modelo de contenido: contenido de flujo, pero sin descendientes elemento de formulario.

Desde el HTML 4.01 Recommendation:

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

(Nota del - sección (FORM)).

3

No es XHTML válido tener que tener formularios anidados. Sin embargo, puede usar múltiples botones de envío y usar un script en el servidor para ejecutar diferentes códigos dependiendo del botón en el que los usuarios hayan hecho clic.

3

n no podemos formas de anidación dentro de otra forma como este

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

que funcionará en algunos casos, pero no se recomienda para las plataformas universales. Puede usar muchos botones ENVIAR dentro de un único formulario, pero no puede administrar un formulario anidado de manera apropiada.

8

Si tiene un formulario maestro y está forzado a tener un "formulario con un formulario" Esto es lo que puede hacer ... en mi caso tenía un enlace en el encabezado global y quería realizar una publicación cuando se haga clic: forma

Ejemplo post con botón de enlace de confirmación:

en lugar de una forma ... envolver su entrada en un div:

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

js archivo:

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

Esto envolvería todo en el interior del div "gap_form" dentro de un formulario sobre la marcha y el enlace enviaría ese formulario. Tengo este ejemplo exacto trabajando en una página ahora ... (En mi ejemplo ... Usted podría lograr lo mismo al redirigir a una página nueva y enviar el formulario en esa página ... pero me gusta más)

+5

¿Por qué downvote una solución de trabajo? No debe desvirtuarse sin dejar comentarios sobre por qué ... –

+22

Ok, downvote y explicación. (1) Esto no resuelve el problema inherente de una "forma dentro de una forma". Sí, has engañado al navegador para que anide formas. Felicitaciones Pero ahora su documento no es válido y el navegador tiene licencia para hacer lo que más le plazca. Y te garantizo que hay un navegador en alguna parte que lanzará un error. (2) Esto rompe todo al infierno si por alguna razón JS está desactivado, los scripts no quieren cargar, o lo que sea. Tal vez no te importe eso, pero es un diseño repugnante confiar en JS para arreglar tu problema en lugar de crear HTML válido en primer lugar. – cHao

8

Los formularios anidados no son compatibles y no forman parte del estándar w3c (como muchos de ustedes han indicado).

Sin embargo, HTML5 agrega soporte para las entradas que no tienen que ser descendientes de ninguna forma, pero pueden enviarse de varias formas, utilizando el atributo "formulario". Esto no permite exactamente formas anidadas, pero al usar este método, puede simular formularios anidados.

El valor del atributo "formulario" debe ser id. Del formulario, o en el caso de formularios múltiples, identificador de formulario separado con espacio.

Puede leer más here

4

Otra solución sería iniciar una ventana modal que contiene su propia forma

+0

¿Tiene un ejemplo? –

69

Formulario de anidación se puede lograr con representación de atributo nuevo HTML5 del elemento de entrada. Aunque no anidamos las formas estructuralmente, las entradas se evalúan tal como están en su propia forma. En mis pruebas, 3 navegadores principales admiten esto, excepto IE (IE11). La limitación de anidamiento de formulario era un gran obstáculo para el diseño de la IU HTML.

Aquí hay un código de ejemplo, al hacer clic en el botón Guardar debería ver "2 3 éxito" (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> 
+9

¡Esto es lo que todos hemos estado esperando! Es una pena para IE ... siempre detrás del resto ... Eso hace que esta gran idea sea inútil para los sitios web públicos ... –

+0

_3 principales navegadores admiten this_ ... el resto es el resto;) –

+0

Esto es bueno saberlo. Lo he implementado en el pasado con atributos de datos personalizados y javascript cuando pude haber incluido una biblioteca html5 shim. –

Cuestiones relacionadas