Надіслати поля форми всередині дисплея: немає елемента


84

У мене довга форма, яку я розбив на 6 етапів. Коли форма завантажується, завантажуються всі кроки, але видно лише перший крок. Решта мають CSS, display:noneтому вони приховані. Коли крок завершено та перевірено за допомогою Javascript, для поточного кроку встановлено значення, display:noneа для нового кроку встановлено значення display:block. На завершальному кроці користувач подає форму. Однак, як очікувалося, display:blockподаються лише поля в елементі на сторінці. Усі заповнені поля в елементах з display:noneігноруються.

Чи є спосіб подати поля всередині display:noneелементів?

Якщо ні, чи є інший спосіб досягти того самого ефекту?


12
В якому браузері ви бачили таку поведінку? Здається, браузери подають елементи форми у display: noneконтейнери у всіх моїх тестах.
трембі

Відповіді:


177

Встановіть їх на visibility:hiddenі position:absoluteзамість цього. Поля не надсилатимуться на сервер з display:none, але будуть з visibility:hidden. Також перемикаючи "положення" на "абсолютне", ви повинні отримати той самий візуальний ефект.

Оновлення Здається, це вже не проблема в жодному поточному браузері (станом на листопад 2015 р.). Поля подаються, навіть якщо для відображення встановлено значення "немає". Однак поля, які "вимкнено", надалі не надсилатимуться.


26
Здається, це не проблема в жодному поточному браузері. Поля подаються, навіть якщо для відображення встановлено значення "немає". Однак поля, які "вимкнено", надалі не надсилатимуться.
adam0101

3
IE8 (сюрприз!) Все ще має проблеми з розміщенням полів, для яких встановлено значення display:none;. Така сама проблема виникає, якщо в полі є інший елемент HTML, розміщений поверх нього.
Erik Töyrä Silfverswärd

2
@Pacerier, так, disabledзапобігає надсиланню значень, але на деяких старих браузерах display:noneце також матиме такий ефект. Майте на увазі, що ця відповідь була опублікована 4 роки тому і стосується лише розробників, яким потрібно розробити для тих старих браузерів.
adam0101

2
Це 20 січня і використовуються найновіші версії chromium та Firefox, але все ще не можна публікувати поля, які були приховані раніше під час завантаження
Masinde Muliro

3
Chrome 49 тут може підтвердити, що надсилання елементів вводу на дисплеї: жоден НЕ працює.
csvan

4

У розділі 17.13.2 HTML4 чітко сказано, що навіть приховані елементи керування за допомогою дисплея: жоден може бути недійсним для подання.

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

Отже, якщо браузер ігнорує display: none, тоді він не повністю підтримує HTML. Я рекомендую перейти на справжній браузер.


1
Програміст не може сказати відвідувачам, який браузер теж використовує, і у мене така сама проблема з останньою версією Firefox. Спроба відображення: немає або видимість: прихована, але жодна не працює.
DonP

Хто ще розміщує банери "Пора оновити ваш браузер" на стільки сайтів? ;-) Зрозуміла. Ви не мали на увазі, що "програміст не може сказати відвідувачам, який браузер використовувати" - це зачіпає свободу слова ... Ви, мабуть, мали на увазі "найнятого програміста". В ПОРЯДКУ. Мій пост був не надто корисним, тому що я просто хотів вказати, яка правильна поведінка продиктована стандартами. Це воно.
elixon

1
У будь-якому випадку мій коментар щодо visibility: hidden (а може, навіть display: none) був нісенітницею, оскільки я зрозумів, що в моєму випадку це помилка, а точніше недогляд, записаний у стандарт HTML. Якщо прапорець не встановлено, а форма надіслана, це ніби навіть її немає. Він не тільки не подає нічого (вибачте за подвійний негатив), але й не подає взагалі.
DonP

Тож схоже на те, що тоді це не був якийсь химерний браузер, який не відповідає HTML. Справу закрито.
elixon
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.