Поля формы отправки внутри дисплея: нет элемента

86

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

Есть ли способ отправить поля внутри display:noneэлементов?

Если нет, есть ли другой способ добиться того же эффекта?

Ник Петри
источник
12
В каком браузере вы заметили такое поведение? Во display: noneвсех моих тестах браузеры, похоже, отправляют элементы формы внутри контейнеров.
tremby

Ответы:

183

Установите их на visibility:hiddenи position:absoluteвместо. Поля не будут отправлены на сервер с display:none, но будут с visibility:hidden. Также переключив «положение» на «абсолютное», вы должны получить тот же визуальный эффект.

Обновление. Похоже, это больше не проблема ни в одном текущем браузере (по состоянию на ноябрь 2015 г.). Поля отправляются, даже если для отображения установлено значение «нет». Однако поля, которые «отключены», по-прежнему не отправляются.

adam0101
источник
26
Это не проблема ни в одном текущем браузере. Поля отправляются, даже если для отображения установлено значение «нет». Однако поля, которые «отключены», по-прежнему не отправляются.
adam0101
3
IE8 (сюрприз!) По-прежнему имеет проблемы с полями публикации, для которых установлено значение display:none;. Та же проблема возникает, если поверх поля помещен другой элемент HTML.
Erik Töyrä Silfverswärd
2
@Pacerier, да, disabledпредотвращает отправку значений, но в некоторых старых браузерах display:noneтакже будет иметь такой эффект. Имейте в виду, что этот ответ был опубликован 4 года назад и применим только к разработчикам, которым необходимо разрабатывать для этих старых браузеров.
adam0101
2
Сейчас 20 января, используются последние версии Chrome и Firefox, но все еще не удается публиковать поля, которые были скрыты ранее при загрузке,
Масинде Мулиро,
3
Chrome 49 здесь может подтвердить, что отправка элементов ввода в display: none НЕ работает.
csvan
4

HTML4, раздел 17.13.2, прямо говорит, что даже скрытые элементы управления, использующие display: none, могут быть пригодны для отправки.

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 02