Mam długą formę, którą podzieliłem na 6 kroków. Po załadowaniu formularza ładowane są wszystkie kroki, ale widoczny jest tylko pierwszy krok. Reszta ma CSS, display:none
więc są one ukryte. Gdy krok jest zakończony i sprawdzony za pomocą JavaScript, ustawiany jest bieżący krok display:none
i nowy krok display:block
. Na ostatnim etapie użytkownik przesyła formularz. Jednak zgodnie z oczekiwaniami display:block
przesyłane są tylko pola w elemencie na stronie. Wszystkie wypełnione pola w elementach z display:none
są ignorowane.
Czy istnieje sposób na przesłanie pól wewnątrz display:none
elementów?
Jeśli nie, czy jest inny sposób na osiągnięcie tego samego efektu?
javascript
css
forms
Nick Petrie
źródło
źródło
display: none
kontenerach we wszystkich moich testach.Odpowiedzi:
Ustaw je na
visibility:hidden
iposition:absolute
zamiast. Pola nie zostaną wysłane na serwer zdisplay:none
, ale będą zvisibility:hidden
. Przełączając również „pozycję” na „absolutną”, powinieneś uzyskać ten sam efekt wizualny.Aktualizacja Wydaje się, że nie stanowi to już problemu w żadnej aktualnej przeglądarce (stan na listopad 2015). Pola są przesyłane, nawet jeśli opcja wyświetlania jest ustawiona na „brak”. Jednak pola, które są „wyłączone”, nadal nie będą przesyłane.
źródło
display:none;
. Ten sam problem występuje, jeśli pole ma umieszczony na wierzchu inny element HTML.disabled
zapobiega przesyłaniu wartości, ale w niektórych starszych przeglądarkachdisplay:none
również miałoby ten efekt. Pamiętaj, że ta odpowiedź została opublikowana 4 lata temu i ma zastosowanie tylko do programistów, którzy muszą programować dla tych starszych przeglądarek.HTML4, sekcja 17.13.2, mówi wprost, że nawet ukryte kontrolki używające display: none mogą być poprawne do przesłania.
https://www.w3.org/TR/html401/interact/forms.html
Więc jeśli przeglądarka ignoruje display: none, to nie obsługuje w pełni HTML. Polecam przejście na prawdziwą przeglądarkę.
źródło