É possível aninhar formulários html como este
<form name="mainForm">
<form name="subForm">
</form>
</form>
para que ambas as formas funcionem? Meu amigo está tendo problemas com isso, uma parte dos subForm
trabalhos, enquanto outra parte não.
html
nested-forms
Levi
fonte
fonte
Respostas:
Em uma palavra, não. Você pode ter vários formulários em uma página, mas eles não devem ser aninhados.
No rascunho de trabalho do html5 :
fonte
Encontrei um problema semelhante e sei que não é uma resposta para a pergunta, mas pode ser
útil para alguém com esse tipo de problema: se houver necessidade de colocar os elementos de duas ou mais formas em uma determinada sequência , o atributo HTML5
<input> form
pode ser a solução.Em http://www.w3schools.com/tags/att_input_form.asp :
Cenário :
Implementação :
Aqui você encontrará a compatibilidade do navegador.
fonte
<input type="submit"
link esteja vinculado ao<form>
que especifica umaction
, o<input />
(s) link (s) vinculado (s) ao mesmo<form>
serão usados nessa solicitaçãoO segundo formulário será ignorado. Veja o trecho do WebKit, por exemplo:
fonte
HTML simples não pode permitir que você faça isso. Mas com javascript você pode fazer isso. Se você estiver usando javascript / jquery, poderá classificar seus elementos de formulário com uma classe e, em seguida, usar serialize () para serializar apenas esses elementos de formulário para o subconjunto dos itens que deseja enviar.
Em seu javascript, você pode fazer isso para serializar elementos class1
Para class2 você poderia fazer
Para toda a forma
ou simplesmente
fonte
Se você estiver usando o AngularJS, quaisquer
<form>
tags dentro do seung-app
serão substituídas no tempo de execução porngForm
diretivas projetadas para serem aninhadas.fonte
Como é 2019, gostaria de dar uma resposta atualizada para esta pergunta. É possível obter o mesmo resultado que os formulários aninhados, mas sem aninhar. O HTML5 introduziu o atributo form. Você pode adicionar o atributo form para formar controles fora de um formulário para vinculá-los a um elemento específico do formulário (por ID).
https://www.impressivewebs.com/html5-form-attribute/
Dessa forma, você pode estruturar seu html assim:
O atributo form é suportado por todos os navegadores modernos. O IE não suporta isso, mas o IE não é mais um navegador, mas uma ferramenta de compatibilidade, conforme confirmado pela própria Microsoft: https://www.zdnet.com/article/microsoft-security-chief-ie-is-not-a -browser-para-parar-de-usar-como-seu-padrão / . Já é hora de pararmos de nos preocupar em fazer as coisas funcionarem no IE.
https://caniuse.com/#feat=form-attribute
https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#attr-fae-form
A partir da especificação html:
fonte
Outra maneira de contornar esse problema, se você estiver usando alguma linguagem de script do lado do servidor que permita manipular os dados publicados, é declarar seu formulário html assim:
Se você imprimir os dados publicados (usarei o PHP aqui), você obterá uma matriz como esta:
Então você pode simplesmente fazer algo como:
Seu $ _POST agora possui apenas os dados do "formulário principal" e os dados do subformulário são armazenados em outra variável que você pode manipular à vontade.
Espero que isto ajude!
fonte
Como Craig disse, não.
Mas, com relação ao seu comentário sobre o porquê :
Pode ser mais fácil usar 1
<form>
com as entradas e o botão "Atualizar" e usar as entradas ocultas de cópia com o botão "Enviar pedido" em outra<form>
.fonte
http://www.w3.org/MarkUp/html3/forms.html
https://www.w3.org/TR/html4/appendix/changes.html#hA.3.9 (a especificação html4 não observa alterações nos formulários de aninhamento de 3.2 a 4)
https://www.w3.org/TR/html4/appendix/changes.html#hA.1.1.12 (a especificação html4 não observa alterações nos formulários de aninhamento de 4.0 para 4.1)
https://www.w3.org/TR/html5-diff/ (a especificação html5 não observa alterações nos formulários de aninhamento de 4 a 5)
https://www.w3.org/TR/html5/forms.html#association-of-controls-and-forms comenta "Este recurso permite que os autores resolvam a falta de suporte para elementos de formulário aninhados". não cite onde isso é especificado, acho que eles estão assumindo que devemos assumir que é especificado na especificação html3 :)
fonte
Uma solução simples é usar um iframe para manter o formulário "aninhado". Visualmente, o formulário está aninhado, mas no lado do código está em um arquivo html separado.
fonte
Você também pode usar formaction = "" dentro da tag button.
Isso seria aninhado na forma original como um botão separado.
fonte
Mesmo se você conseguir que ele funcione em um navegador, não há garantia de que funcionaria da mesma maneira em todos os navegadores. Então, enquanto você pode ser capaz de fazê-lo funcionar algum do tempo, você certamente não seria capaz de fazê-lo funcionar todo o tempo.
fonte
Você ainda teria problemas para fazê-lo funcionar em diferentes versões do mesmo navegador. Portanto, evite usar isso.
fonte
Embora não apresente uma solução para formulários aninhados (não funciona de maneira confiável), apresento uma solução alternativa que funciona para mim:
Cenário de uso: um superformulário que permite alterar N itens de uma só vez. Possui um botão "Enviar tudo" na parte inferior. Cada item deseja ter seu próprio formulário aninhado com o botão "Enviar item nº N". Mas não pode ...
Neste caso, pode-se realmente usar um único formulário, e depois ter o nome dos botões de ser
submit_1
..submit_N
esubmitAll
e manipulá-lo servidores de lado, apenas olhando para params que terminam em_1
se o nome do botão foisubmit_1
.Ok, não há muita invenção, mas faz o trabalho.
fonte
Sobre o aninhamento de formulários: Passei 10 anos uma tarde tentando depurar um script ajax.
minha resposta / exemplo anterior não foi responsável pela marcação html, desculpe.
O formulário_2 falhava constantemente ao dizer o formulário inválido
Quando mudei o ajaxContainer que produzia o formulário_2
<i>outside</i>
do formulário_1, eu estava de volta aos negócios. É a resposta à pergunta de por que alguém pode aninhar formulários. Quero dizer, realmente, qual é o ID para não definir qual formulário deve ser usado? Deve haver um trabalho melhor e mais eficiente.fonte
Use a tag de formulário vazia antes do formulário aninhado
Testado e Trabalhado no Firefox, Chrome
Não testado no IE
fonte
Embora a pergunta seja bastante antiga e eu concorde com o @everyone que o aninhamento de formulário não é permitido em HTML
Mas isso é algo que todos podem querer ver isso
onde você pode invadir (estou chamando de invasão, pois tenho certeza de que isso não é legítimo) html para permitir que o navegador tenha um formulário aninhado
JS LINK FIDDLE
http://jsfiddle.net/nzkEw/10/
fonte
Não, você não pode ter um formulário aninhado. Em vez disso, você pode abrir um Modal que contém o formulário e executar o envio do formulário Ajax.
fonte
Realmente não é possível ... Não consegui aninhar tags de formulário ... No entanto, usei este código:
com
{% csrf_token %}
e outras coisase aplicou algum JS
fonte
Hoje, eu também fiquei preso no mesmo problema e resolvi o problema: adicionei um controle de usuário e,
nesse controle, uso esse código
e no evento PreRenderComplete da página, chame este método
Eu acredito que isso vai ajudar.
fonte
Antes que eu soubesse que não deveria fazer isso, aninhei formulários com o objetivo de ter vários botões de envio. Funcionou dessa maneira por 18 meses, milhares de transações de inscrição, ninguém nos ligou sobre quaisquer dificuldades.
Os formulários aninhados me deram um ID para analisar a ação correta a ser tomada. Não quebrou até tentar anexar um campo a um dos botões e validar a reclamação. Não foi grande coisa para desembaraçar - usei uma string explícita no formulário externo para que não importasse o envio e o formulário não correspondessem. Sim, sim, deveria ter retirado os botões de um envio para um onclick.
O ponto é que existem circunstâncias em que não está totalmente quebrado. Mas "não totalmente quebrado" é talvez um padrão muito baixo para se atirar em :-)
fonte