¿Está <input> bien formado sin un <form>?

225

¿Es válido tenerlo <input>sin estar en un <form>?

Tenga un proceso para marcar algunos campos en las páginas y acabo de encontrar una página con campos de entrada que no estaban marcados como esperaba.
Me tomó un tiempo, pero me di cuenta de que el proceso de obtener los elementos del formulario y luego obtener los campos es lo que hizo que se los perdiera porque no hay un formulario.

Greg Domjan
fuente
@Adriano: mi pensamiento exactamente. ¡solo corre y mira!
Gabriel Hurley
1
Seguro validador w3c , realmente debería haber agregado una explicación detrás de por qué sería bueno.
Greg Domjan
También quiero decir que podría ser válido para algunas versiones de html, pero no para otras, y en ese caso, el validador es mucho más rápido que leer los estándares.
Adriano Varoli Piazza

Respuestas:

200

<input>sin un <form> parece válido , sí (al menos para html 4.01, mire cerca del final de 17.2.1):

Los elementos utilizados para crear controles generalmente aparecen dentro de un elemento FORM, pero también pueden aparecer fuera de una declaración de elemento FORM cuando se utilizan para crear interfaces de usuario. Esto se discute en la sección sobre eventos intrínsecos. Tenga en cuenta que los controles fuera de un formulario no pueden ser controles exitosos.

ChristopheD
fuente
77
Para poder enviar datos de formulario a un servidor (aparte de Ajax).
Ludovic Kuty
55
@PhilipSmith Sé que tu comentario fue escrito hace mucho tiempo. Pero, ¿por qué crees que esto es extraño o inútil? ¿Por qué querría crear un formulario si el control no se está comunicando con un servidor?
adam-beck
18
¿Qué es un "control exitoso"?
AlikElzin-kilaka
22
Cuando se envía un formulario para su procesamiento, algunos controles tienen su nombre emparejado con su valor actual y estos pares se envían con el formulario. Los controles para los que se envían pares de nombre / valor se denominan controles exitosos. w3c
SantiBailors
3
@ adam-beck Por ejemplo, un determinado sitio web de AngularJS maneja entradas, manipula datos y los envía a una API. Las plantillas HTML para formularios se pueden escribir sin etiquetas de formulario y se comunican con el servidor perfectamente.
sr9yar
75

Verifiqué lo siguiente con el validador W3C y confirma que esto es válido.

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

Referencia a una especificación más actualizada:

HTML 5.2 - Recomendación del W3C (14 de diciembre de 2017)

Un elemento asociado a un formulario puede tener una relación con un <form>elemento, que se denomina propietario del formulario del elemento. Si un elemento asociado a un formulario no está asociado con un <form>elemento, se dice que su propietario de formulario es nulo.

David
fuente
4

Según MDN es posible:

Tenga en cuenta que siempre es posible usar un widget de formulario fuera de un elemento, pero si lo hace, ese widget de formulario no tiene nada que ver con ningún formulario. Dichos widgets se pueden usar fuera de un formulario, pero entonces debe tener un plan especial para dichos widgets, ya que no harán nada por sí solos. Tendrá que personalizar su comportamiento con JavaScript.

HTML5 introduce el atributo de formulario en elementos de formulario HTML. Debería permitirle vincular explícitamente un elemento con un formulario incluso si no está encerrado dentro de una etiqueta de formulario. Desafortunadamente, por el momento, la implementación de esta característica en todos los navegadores aún no es lo suficientemente buena como para confiar en ella.

Adnan Faradhi
fuente
2

Sé que esta pregunta es bastante antigua, sin embargo, he creado con éxito muchas páginas complejas de entrada de datos sin etiquetas de formulario. Aunque no es considerado "estándar" por muchos, NO es inapropiado usar entradas sin un <form>. Mis proyectos eran instancias en las que necesitaba un control completo sobre cómo se comportaba la página y el comportamiento predeterminado del formulario se estaba interponiendo. Pude realizar la validación de nivel de página y campo (usando JS) y "envié" los datos con llamadas Ajax, etc. De hecho, esta es mi forma preferida en estos días.

Se requiere mucho JS, pero no es tan difícil y se hace fácilmente como código reutilizable.

También hay otros casos en los que definitivamente NO uso formularios con entradas como páginas de inicio de sesión.

Espero que este testimonio ayude a alguien.

G-Man
fuente
1

Sí, puede tener una entrada válida sin un formulario.

Heisenberg
fuente
14
Bueno, podrías haber agregado alguna evidencia detrás del 'sí'. O una aclaración de las versiones de HTML para las que esto es cierto. Aún así, no te habría rebajado.
Adriano Varoli Piazza
99
Entonces, con su justificación, ¿por qué incluso tener SO en absoluto si el usuario puede simplemente ir a W3 y buscarlo él mismo? Yo tampoco te habría rechazado, pero tendría que estar de acuerdo en que el que tenga más explicaciones de una manera clara y concisa reciba el voto positivo, porque una explicación y la respuesta correcta es lo que más ayuda aquí en SO.
Mattygabe
-10

Claro, usa

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

para verificar la validez del campo dinámicamente.

taran
fuente
31
Eso no tiene nada que ver con la validez de marcado, sino que es para la API de validación de restricciones . Cómo esta respuesta obtuvo 8 votos a favor está más allá de mí.
user247702