<input> está bem formado sem um <form>?

225

É válido ter <input>sem estar em um <form>?

Tenha um processo para marcar alguns campos nas páginas e apenas encontre uma página com campos de entrada que não estejam sendo marcados como eu esperava.
Demorei um pouco, mas descobri que o processo de obter os elementos do formulário e obter os campos é o que causou a perda deles, porque não há formulário.

Greg Domjan
fonte
@ Adriano - meu pensamento exatamente. basta passar e ver!
Gabriel Hurley
1
Claro validador w3c , eu realmente deveria ter acrescentado que uma explicação por que seria legal.
Greg Domjan
Quero dizer também que pode ser válido para algumas versões do html, mas não para outras, e nesse caso, o validador é muito mais rápido do que examinar os padrões.
Adriano Varoli Piazza

Respostas:

200

<input>sem um <form> parecer válido , sim (pelo menos para o html 4.01, olhe próximo ao final do 17.2.1):

Os elementos usados ​​para criar controles geralmente aparecem dentro de um elemento FORM, mas também podem aparecer fora de uma declaração de elemento FORM quando são usados ​​para criar interfaces com o usuário. Isso é discutido na seção sobre eventos intrínsecos. Observe que controles fora de um formulário não podem ser controles bem-sucedidos.

ChristopheD
fonte
7
Ser capaz de enviar dados de formulário para um servidor (Ajax de lado).
Ludovic Kuty 9/09/13
5
@PhilipSmith Eu sei que seu comentário foi escrito há muito tempo. Mas por que você acha isso estranho ou inútil? Por que eu desejaria criar um formulário se o controle não estiver se comunicando com um servidor?
Adam-beck
18
O que é um "controle bem-sucedido"?
AlikElzin-Kilaka
22
Quando um formulário é enviado para processamento, alguns controles têm seu nome emparelhado com seu valor atual e esses pares são enviados com o formulário. Os controles para os quais os pares nome / valor são enviados são chamados de controles bem-sucedidos. w3c
SantiBailors 12/11/2015
3
@ adam-beck Por exemplo, um determinado site do AngularJS lida com entradas, manipula dados e os envia para uma API. Os modelos HTML para formulários podem ser escritos sem nenhuma tag de formulário e eles se comunicam com o servidor.
Sr9yar
75

Eu verifiquei o seguinte com o validador W3C e ele confirma que isso é válido.

<!DOCTYPE html>
<html>
<head>
  <title>test</title>
</head>
<body>
  <input type='text' />
</body>
</html>
Wai Yip Tung
fonte
6

Referência a uma especificação mais atualizada:

HTML 5.2 - Recomendação do W3C (14 de dezembro de 2017)

Um elemento associado ao formulário pode ter um relacionamento com um <form>elemento, chamado de proprietário do formulário. Se um elemento associado ao formulário não estiver associado a um <form>elemento, seu proprietário do formulário será considerado nulo.

David
fonte
4

De acordo com o MDN, é possível:

Observe que sempre é possível usar um widget de formulário fora de um elemento, mas se você o fizer, esse widget de formulário não tem nada a ver com nenhum formulário. Esses widgets podem ser usados ​​fora de um formulário, mas você deve ter um plano especial para tais widgets, pois eles não farão nada por si mesmos. Você precisará personalizar o comportamento deles com JavaScript.

O HTML5 apresenta o atributo do formulário nos elementos do formulário HTML. Ele deve permitir que você vincule explicitamente um elemento a um formulário, mesmo que não esteja dentro de uma tag de formulário. Infelizmente, por enquanto, a implementação desse recurso nos navegadores ainda não é boa o suficiente para confiar nele.

Adnan Faradhi
fonte
2

Sei que essa pergunta é bastante antiga, no entanto, criei com êxito muitas páginas de entrada de dados complexas sem tags de formulário. Embora não seja considerado "padrão" por muitos, NÃO é inapropriado usar entradas sem a <form>. Meus projetos foram instâncias em que eu precisava de controle completo sobre como a página se comportava e o comportamento padrão do formulário estava atrapalhando. Consegui realizar a validação no nível da página e do campo (usando JS) e "enviou" os dados com chamadas do Ajax, etc ... de fato, esta é a minha maneira preferida atualmente.

É necessário muito JS, mas não é tão difícil e é fácil como código reutilizável.

Também existem outros casos em que eu NÃO uso formulários com entradas como Páginas de login.

Espero que este depoimento ajude alguém.

G-Man
fonte
1

Sim, você pode ter uma entrada válida sem um formulário.

Heisenberg
fonte
14
Bem, você poderia ter acrescentado alguma evidência por trás do 'sim'. Ou um esclarecimento de quais versões do HTML são verdadeiras. Ainda assim, eu não teria te rebaixado.
Adriano Varoli Piazza 21/07
9
Então, com o seu raciocínio, por que ter SO, se o usuário pode simplesmente ir para o W3 e procurar por ele mesmo? Também não teria votado contra você, mas teria que concordar que aquele com mais explicações de maneira clara e concisa recebe o voto positivo, porque uma explicação e a resposta correta são as mais úteis aqui na SO.
Mattygabe
-10

Claro, use

document.getElementById('your_input_id').validity.valid

para verificar a validade do campo dinamicamente.

Taran
fonte
31
Isso não tem nada a ver com a validade da marcação, mas sim com a API de validação de restrição . Como esta resposta obteve 8 votos positivos está além de mim.
precisa saber é o seguinte