Invia campi modulo all'interno del display: nessun elemento


86

Ho una forma lunga che ho suddiviso in 6 passaggi. Quando il modulo viene caricato, vengono caricati tutti i passaggi, ma è visibile solo il primo passaggio. Il resto ha CSS di display:nonequindi sono nascosti. Quando un passaggio viene completato e convalidato con Javascript, il passaggio corrente viene impostato su display:nonee il nuovo passaggio viene impostato su display:block. Nella fase finale, l'utente invia il modulo. Tuttavia, come previsto, display:blockvengono inviati solo i campi nell'elemento della pagina. Tutti i campi completati negli elementi con display:nonevengono ignorati.

C'è un modo per inviare i campi all'interno degli display:noneelementi?

In caso contrario, esiste un altro modo per ottenere lo stesso effetto?


12
In quale browser hai visto questo comportamento? I browser sembrano inviare elementi del modulo all'interno dei display: nonecontenitori in tutti i miei test.
tremby

Risposte:


183

Impostali su visibility:hiddene position:absoluteinvece. I campi non verranno inviati al server con display:none, ma saranno con visibility:hidden. Anche spostando "posizione" su "assoluto" dovresti ottenere lo stesso effetto visivo.

Aggiornamento Questo non sembra più essere un problema in nessun browser corrente (a partire da novembre 2015). I campi vengono inviati anche se la visualizzazione è impostata su "nessuno". I campi "disabilitati", tuttavia, continueranno a non essere inviati.


26
Questo non sembra essere un problema in nessun browser corrente. I campi vengono inviati anche se la visualizzazione è impostata su "nessuno". I campi "disabilitati", tuttavia, continueranno a non essere inviati.
adam0101

3
IE8 (sorpresa!) Ha ancora problemi con i campi di pubblicazione impostati su display:none;. Lo stesso problema si verifica se il campo ha un altro elemento HTML posizionato sopra di esso.
Erik Töyrä Silfverswärd

2
@Pacerier, sì disabledimpedisce l' invio di valori, ma su alcuni browser meno recenti display:noneavrebbe anche questo effetto. Tieni presente che questa risposta è stata pubblicata 4 anni fa ed è applicabile solo agli sviluppatori che devono sviluppare per quei browser meno recenti.
adam0101

2
È il 20 gennaio e si utilizzano le ultime versioni di Chrome e Firefox, ma non è ancora possibile pubblicare campi nascosti in precedenza durante il caricamento
Masinde Muliro

3
Chrome 49 qui, può confermare che l'invio di elementi di input all'interno del display: nessuno NON funziona.
csvan

4

L'HTML4, sezione 17.13.2, afferma esplicitamente che anche i controlli nascosti che utilizzano display: nessuno può essere valido per l'invio.

https://www.w3.org/TR/html401/interact/forms.html

Quindi, se il browser ignora la visualizzazione: nessuna, non è completamente compatibile con HTML. Consiglio di passare a un browser reale.


1
Un programmatore non può dire ai visitatori quale browser usa anche io e sto riscontrando lo stesso problema con l'ultimo Firefox. Tentativo di visualizzazione: nessuno o visibilità: nascosto ma nessuno dei due funziona.
DonP

Chi altro sta inserendo banner "È ora di aggiornare il tuo browser" su così tanti siti? ;-) Capisco. Non volevi dire che "il programmatore non può dire ai visitatori quale browser usare" - ciò violerebbe la libertà di espressione ... Probabilmente intendevi "programmatore assunto". OK. Il mio post non è stato di grande aiuto perché volevo solo segnalare qual è il comportamento corretto dettato dagli standard. Questo è tutto.
elixon

1
In ogni caso, il mio commento sulla visibilità: nascosto (e forse anche display: nessuno) era una sciocchezza poiché mi sono reso conto che nel mio caso si tratta di un bug, o meglio di una svista, scritto nello standard HTML. Se una casella di controllo è deselezionata e il modulo inviato, è come se non fosse nemmeno lì. Non solo non presenta nulla (scusate il doppio negativo) ma non si sottomette affatto.
DonP

Quindi sembra che allora non fosse un bizzarro browser non compatibile con HTML. Caso chiuso.
elixon
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.