É html válido ter o seguinte:
<form action="a">
<input.../>
<form action="b">
<input.../>
<input.../>
<input.../>
</form>
<input.../>
</form>
Portanto, quando você envia "b", você obtém apenas os campos no formulário interno. Quando você envia "a", obtém todos os campos menos aqueles dentro de "b".
Se não for possível, quais soluções alternativas estão disponíveis?
html
web-standards
standards-compliance
allyourcode
fonte
fonte
Respostas:
A. Não é HTML válido nem XHTML
Na especificação oficial W3C XHTML, a Seção B. "Proibições de elementos" afirma que:
http://www.w3.org/TR/xhtml1/#prohibitions
Quanto à especificação mais antiga do HTML 3.2 , a seção no elemento FORMS declara que:
B. A solução alternativa
Existem soluções alternativas usando JavaScript sem a necessidade de aninhar tags de formulário.
"Como criar um formulário aninhado." (apesar do título, não são tags de formulário aninhadas, mas uma solução alternativa para JavaScript).
Respostas a esta pergunta do StackOverflow
Nota: Embora se possa enganar os Validadores do W3C para passar uma página manipulando o DOM via script, ainda não é HTML legal. O problema com o uso dessas abordagens é que o comportamento do seu código agora não é garantido nos navegadores. (já que não é padrão)
fonte
Caso alguém encontre este post aqui, é uma ótima solução sem a necessidade de JS. Use dois botões de envio com atributos de nome diferentes, verifique no idioma do servidor qual botão de envio foi pressionado, pois apenas um deles será enviado ao servidor.
O lado do servidor pode ser algo assim se você usar php:
fonte
O HTML 4.x e o HTML5 não permitem formulários aninhados, mas o HTML5 permitirá uma solução alternativa com o atributo "formulário" ("proprietário do formulário").
Quanto ao HTML 4.x, você pode:
fonte
Como outros já disseram, não é um HTML válido.
Parece que você está fazendo isso para posicionar os formulários visualmente um dentro do outro. Se for esse o caso, basta fazer dois formulários separados e usar CSS para posicioná-los.
fonte
Não, a especificação HTML afirma que nenhum
FORM
elemento deve conter outroFORM
elemento.fonte
Você pode responder sua própria pergunta com muita facilidade inserindo o código HTML no W3 Validator . (Possui um campo de entrada de texto, você nem precisará colocar seu código em um servidor ...)
(E não, não será validado.)
fonte
em vez disso, use um método javascript personalizado dentro do atributo action do formulário!
por exemplo
fonte
Uma possibilidade é ter um iframe dentro da forma externa. O iframe contém a forma interna. Certifique-se de usar a
<base target="_parent" />
tag dentro da tag head do iframe para fazer com que o formulário se comporte como parte da página principal.fonte
não, veja w3c
fonte
Não, não é válido. Mas uma "solução" pode estar criando uma janela modal fora do formulário "a" que contém o formulário "b".
Isso pode ser feito facilmente se você estiver usando o bootstrap ou materializar o css. Estou fazendo isso para evitar o uso de iframe.
fonte
Uma solução alternativa não JavaScript para aninhar tags de formulário:
Porque você permite
ao enviar "a", o seguinte funcionaria, usando formulários da Web regulares sem truques sofisticados de JavaScript:
Etapa 1. Coloque cada formulário em sua própria página da web.
Etapa 2. Insira um iframe onde quiser que esse sub-formulário apareça.
Etapa 3. Lucro.
Tentei usar um site de playground de código para mostrar uma demonstração, mas muitos deles proíbem incorporar seus sites em iframes, mesmo dentro de seu próprio domínio.
fonte
Se você precisar que seu formulário envie / confirme dados em um banco de dados relacional 1: M, eu recomendaria a criação de um acionador de banco de dados "após inserção" na tabela A que inserirá os dados necessários para a tabela B.
fonte
Não, não é válido, mas você pode enganar sua posição interna no formulário
HTML
com a ajudaCSS
e ojQuery
uso. Primeiro, crie alguma div de contêiner dentro do formulário pai e, em qualquer outro lugar da página, a div com o formulário filho (interno):....
Dê ao seu container div um peso estável
Obrigado enganar a posição "other_form" em relação ao container div.
PS: Você terá que jogar com números para torná-lo bonito.
fonte