¿Es posible anidar formas html como esta?
<form name="mainForm">
<form name="subForm">
</form>
</form>
para que ambas formas funcionen? Mi amigo está teniendo problemas con esto, una parte de las subForm
obras, mientras que otra parte no.
html
nested-forms
Levi
fuente
fuente
Respuestas:
En una palabra, no. Puede tener varios formularios en una página, pero no deben estar anidados.
Del borrador de trabajo html5 :
fuente
Me encontré con un problema similar, y sé que no es una respuesta a la pregunta, pero puede ser de ayuda para alguien con este tipo de problema:
si es necesario poner los elementos de dos o más formas en una secuencia dada , el atributo HTML5
<input> form
puede ser la solución.De http://www.w3schools.com/tags/att_input_form.asp :
Escenario :
implementación :
Aquí encontrarás la compatibilidad del navegador.
fuente
<input type="submit"
se vincule a su<form>
que especifique unaction
, la<input />
(s) vinculación a ese mismo<form>
se utilizará en esa solicitudEl segundo formulario será ignorado, vea el fragmento de WebKit, por ejemplo:
fuente
El HTML simple no puede permitirte hacer esto. Pero con javascript puedes hacer eso. Si está utilizando javascript / jquery, podría clasificar sus elementos de formulario con una clase y luego usar serialize () para serializar solo esos elementos de formulario para el subconjunto de los elementos que desea enviar.
Luego, en su javascript, podría hacer esto para serializar elementos de clase 1
Para la clase 2 podrías hacer
Para toda la forma
o simplemente
fuente
Si está usando AngularJS, cualquier
<form>
etiqueta dentro de ustedng-app
se reemplaza en tiempo de ejecución conngForm
directivas que están diseñadas para anidarse.fuente
Como es 2019, me gustaría dar una respuesta actualizada a esta pregunta. Es posible lograr el mismo resultado que las formas anidadas, pero sin anidarlas. HTML5 introdujo el atributo de formulario. Puede agregar el atributo de formulario a los controles de formulario fuera de un formulario para vincularlos a un elemento de formulario específico (por id).
https://www.impressivewebs.com/html5-form-attribute/
De esta manera puede estructurar su html de esta manera:
El atributo de formulario es compatible con todos los navegadores modernos. Sin embargo, IE no es compatible con esto, pero IE ya no es un navegador, sino una herramienta de compatibilidad, como lo confirmó Microsoft: https://www.zdnet.com/article/microsoft-security-chief-ie-is-not-a -browser-so-stop-using-it-as-your-default / . Ya es hora de que dejemos de preocuparnos por hacer que las cosas funcionen en IE.
https://caniuse.com/#feat=form-attribute
https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#attr-fae-form
De la especificación html:
fuente
Otra forma de solucionar este problema, si está utilizando un lenguaje de script del lado del servidor que le permite manipular los datos publicados, es declarar su formulario html de esta manera:
Si imprime los datos publicados (usaré PHP aquí), obtendrá una matriz como esta:
Entonces puedes hacer algo como:
Su $ _POST ahora solo tiene sus datos de "formulario principal", y sus datos de subformulario se almacenan en otra variable que puede manipular a voluntad.
¡Espero que esto ayude!
fuente
Como dijo Craig, no.
Pero, con respecto a su comentario sobre por qué :
Puede ser más fácil usar 1
<form>
con las entradas y el botón "Actualizar", y usar entradas ocultas de copia con el botón "Enviar pedido" en otro<form>
.fuente
http://www.w3.org/MarkUp/html3/forms.html
https://www.w3.org/TR/html4/appendix/changes.html#hA.3.9 (la especificación html4 no observa cambios con respecto a los formularios de anidación de 3.2 a 4)
https://www.w3.org/TR/html4/appendix/changes.html#hA.1.1.12 (la especificación html4 no observa cambios con respecto a los formularios de anidación de 4.0 a 4.1)
https://www.w3.org/TR/html5-diff/ (la especificación html5 no observa cambios en los formularios de anidación de 4 a 5)
https://www.w3.org/TR/html5/forms.html#association-of-controls-and-forms comentarios a "Esta característica permite a los autores evitar la falta de soporte para elementos de formulario anidados", pero no cito donde se especifica esto, creo que están asumiendo que debemos asumir que está especificado en la especificación html3 :)
fuente
Una solución simple es usar un iframe para contener el formulario "anidado". Visualmente, el formulario está anidado pero en el lado del código está en un archivo html por completo.
fuente
También puede usar formaction = "" dentro de la etiqueta del botón.
Esto estaría anidado en la forma original como un botón separado.
fuente
Incluso si pudiera hacer que funcione en un navegador, no hay garantía de que funcione de la misma manera en todos los navegadores. Entonces, si bien es posible que pueda hacer que funcione algunas veces, ciertamente no podrá hacerlo funcionar todo el tiempo.
fuente
Incluso tendría problemas para hacerlo funcionar en diferentes versiones del mismo navegador. Así que evita usar eso.
fuente
Si bien no presento una solución para formularios anidados (no funciona de manera confiable), sí presento una solución alternativa que funciona para mí:
Escenario de uso: una superforma que permite cambiar N elementos a la vez. Tiene un botón "Enviar todo" en la parte inferior. Cada elemento quiere tener su propio formulario anidado con un botón "Enviar elemento # N". Pero no puedo ...
En este caso, se puede utilizar realmente una sola forma, y luego tener el nombre de los botones sean
submit_1
..submit_N
ysubmitAll
y manejar los servidores de juego, con sólo mirar params que terminan en_1
si el nombre del botón erasubmit_1
.Ok, no es un gran invento, pero hace el trabajo.
fuente
Acerca de los formularios de anidación: pasé 10 años una tarde tratando de depurar un script ajax.
mi respuesta / ejemplo anterior no tenía en cuenta el marcado html, lo siento.
form_2 fallaba constantemente diciendo inválido form_2.
Cuando trasladé el contenedor ajax que produjo form_2
<i>outside</i>
de form_1, volví al negocio. Es la respuesta a la pregunta de por qué uno podría anidar formas. Quiero decir, realmente, ¿para qué sirve la identificación si no es para definir qué formulario se utilizará? Debe haber una mejor y más flexible solución.fuente
Use una etiqueta de formulario vacía antes de su formulario anidado
Probado y trabajado en Firefox, Chrome
No probado en IE
fuente
Aunque la pregunta es bastante antigua y estoy de acuerdo con @everyone en que la anidación de formularios no está permitida en HTML
Pero esto es algo que todos querrían ver esto
donde puedes hackear (lo llamo un hack porque estoy seguro de que esto no es legítimo) html para permitir que el navegador tenga un formulario anidado
JS FIDDLE LINK
http://jsfiddle.net/nzkEw/10/
fuente
No, no puede tener un formulario anidado. En su lugar, puede abrir un modal que contiene el formulario y realizar el envío del formulario Ajax.
fuente
Realmente no es posible ... No pude anidar etiquetas de formulario ... Sin embargo, utilicé este código:
con
{% csrf_token %}
y esas cosasy aplicó un poco de JS
fuente
Hoy, también me quedé atrapado en el mismo problema y resolví el problema. Agregué un control de usuario y
en este control uso este código.
y en el evento PreRenderComplete de la página, llame a este método
Creo que esto ayudará.
fuente
Antes de darme cuenta de que no se suponía que debía hacer esto, había anidado formularios con el fin de tener varios botones de envío. Funcionó de esa manera durante 18 meses, miles de transacciones de registro, nadie nos llamó sobre ninguna dificultad.
Los formularios anidados me dieron una identificación para analizar la acción correcta que debo tomar. No se rompió hasta que intenté adjuntar un campo a uno de los botones y Validar se quejó. No fue un gran problema desenredarlo: utilicé un stringify explícito en el formulario externo, por lo que no importó el envío y el formulario no coincidía. Sí, sí, debería haber tomado los botones de un envío a un clic.
El punto es que hay circunstancias en las que no está completamente roto. Pero "no completamente roto" es quizás un estándar demasiado bajo para disparar :-)
fuente