<input> è ben formato senza <form>?


225

È valido avere <input>senza essere in un <form>?

Avere un processo per contrassegnare alcuni campi nelle pagine e ho appena trovato una pagina con campi di input che non sono stati contrassegnati come mi aspettavo.
Mi ci è voluto un po 'di tempo, ma ho capito che il processo di ottenere gli elementi del modulo e quindi ottenere i campi è ciò che ha causato la perdita di questi perché non esiste alcun modulo.


@Adriano - il mio pensiero esattamente. basta eseguirlo e vedere!
Gabriel Hurley,

1
Certo validatore w3c , avrei davvero dovuto aggiungere una spiegazione dietro perché sarebbe bello.
Greg Domjan,

Intendo anche che potrebbe essere valido per alcune versioni di html, ma non per altre, e in quel caso, il validatore è molto più veloce di esaminare gli standard.
Adriano Varoli Piazza

Risposte:


200

<input>senza un <form> appare valido , sì (almeno per HTML 4.01, guarda verso la fine di 17.2.1):

Gli elementi utilizzati per creare i controlli compaiono generalmente all'interno di un elemento FORM, ma possono anche apparire al di fuori di una dichiarazione dell'elemento FORM quando vengono utilizzati per creare interfacce utente. Questo è discusso nella sezione sugli eventi intrinseci. Si noti che i controlli all'esterno di un modulo non possono essere controlli riusciti.


7
Essere in grado di inviare i dati del modulo a un server (a parte Ajax).
Ludovic Kuty,

5
@PhilipSmith So che il tuo commento è stato scritto molto tempo fa. Ma perché pensi che sia strano o inutile? Perché dovrei creare un modulo se il controllo non comunica con un server?
Adam-Beck,

18
Che cos'è un "controllo riuscito"?
AlikElzin-Kilaka,

22
Quando un modulo viene inviato per l'elaborazione, alcuni controlli hanno il loro nome associato al loro valore corrente e queste coppie vengono inviate con il modulo. I controlli per i quali vengono inviate coppie nome / valore sono chiamati controlli riusciti. w3c
SantiBailors,

3
@ adam-beck Ad esempio, un determinato sito Web AngularJS gestisce gli input, manipola i dati e li invia a un API. I modelli HTML per i moduli possono essere scritti senza tag dei moduli e comunicano bene con il server.
sr9yar,

75

Ho verificato quanto segue con il validatore W3C e conferma che questo è valido.

<!DOCTYPE html>
<html>
<head>
  <title>test</title>
</head>
<body>
  <input type='text' />
</body>
</html>

6

Riferimento a una specifica più aggiornata:

HTML 5.2 - Raccomandazione W3C (14 dicembre 2017)

Un elemento associato al modulo può avere una relazione con un <form>elemento, chiamato proprietario del modulo dell'elemento. Se un elemento associato al modulo non è associato a un <form>elemento, il suo proprietario del modulo viene considerato nullo.


4

Secondo MDN è possibile:

Si noti che è sempre possibile utilizzare un widget modulo all'esterno di un elemento, ma in tal caso, quel widget modulo non ha nulla a che fare con alcun modulo. Tali widget possono essere utilizzati al di fuori di un modulo, ma è necessario disporre di un piano speciale per tali widget, poiché non faranno nulla da soli. Dovrai personalizzare il loro comportamento con JavaScript.

HTML5 introduce l'attributo del modulo sugli elementi del modulo HTML. Dovrebbe consentire di associare esplicitamente un elemento con un modulo anche se non è racchiuso in un tag del modulo. Sfortunatamente, per il momento, l'implementazione di questa funzione nei browser non è ancora abbastanza buona da poterci affidare.


2

So che questa domanda è piuttosto vecchia, tuttavia, ho creato con successo molte pagine di inserimento dati complesse senza tag del modulo. Sebbene non sia considerato "standard" da molti, NON è inappropriato utilizzare input senza a <form>. I miei progetti erano casi in cui avevo bisogno di un controllo completo su come si comportava la pagina e il comportamento del modulo predefinito si metteva in mezzo. Sono stato in grado di eseguire la convalida a livello di pagina e di campo (utilizzando JS) e "inviato" i dati con chiamate Ajax ecc ... in effetti, questo è il mio modo preferito in questi giorni.

È richiesto un sacco di JS, ma non è così difficile ed è facilmente eseguibile come codice riutilizzabile.

Ci sono anche altri casi in cui NON uso moduli con input come Pagine di accesso.

Spero che questa testimonianza aiuti qualcuno.


1

Sì, puoi avere un input valido senza un modulo.


14
Bene, avresti potuto aggiungere alcune prove dietro il 'sì'. O un chiarimento per quali versioni di HTML questo è vero. Tuttavia, non ti avrei sminuito.
Adriano Varoli Piazza

9
Quindi, con la tua logica, perché anche avere SO se l'utente può semplicemente andare su W3 e cercarlo da solo? Nemmeno io ti avrei sottovalutato, ma dovrei concordare sul fatto che quello con più spiegazioni in modo chiaro e conciso ottenga il voto, perché una spiegazione e la risposta corretta sono ciò che è più utile qui a SO.
Mattygabe,

-10

Certo, usa

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

per verificare la validità del campo in modo dinamico.


31
Ciò non ha nulla a che fare con la validità del markup, invece è per l' API di convalida del vincolo . Come questa risposta abbia ottenuto 8 voti è oltre me.
user247702
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.