Скрыть поле формы, но не отправлять в JavaScript

#javascript #forms

#javascript #формы

Вопрос:

Я хочу скрыть некоторые поля формы по умолчанию и показывать их только в группах в зависимости от флажка.

Если пользователь показывает некоторые поля, заполняет их, но затем повторно скрывает их с помощью флажка, будут ли данные отправлены в любом случае, если в полях что-то есть, или я должен очистить их с помощью JavaScript?

Комментарии:

1. Вы должны определить, какие поля используются в серверной части, в зависимости от значения флажка. Отключенные поля зависят от вас, хотите ли вы использовать то, что в них содержится, или нет.

2. Если jQuery является допустимой опцией, легко определить, какие поля не видны при отправке формы, затем отключите эти поля, тем самым добившись желаемого. Дайте мне знать, если это возможно, и я опубликую краткий пример кода.

Ответ №1:

Поля будут отправлены в любом случае, но ваш сервис, который получает post, должен просто искать значение этого флажка и игнорировать значения в этот момент. Либо это, либо вам нужно будет очистить поля.

Комментарии:

1. Да, это то, что я в конечном итоге делаю. Собираюсь также очистить поля, чтобы отправлять только те данные, которые необходимо отправить, но я могу заблокировать на уровне обслуживания и вернуться оттуда. Спасибо.

Ответ №2:

В соответствии со спецификацией html поле отправляется, если оно соответствует следующим критериям:

  • Оно содержится в отправляемой форме
  • Оно имеет тип input, select, button (ввод, выбор, кнопка)
  • Оно содержит непустой атрибут name
  • Если оно имеет <тип ввода=»checkbox» или тип =»radio»/>, оно должно быть отмечено.

Видимость не важна. На самом деле есть много причин, по которым что-то может быть невидимым, включая то, что оно находится за пределами экрана. Некоторые методы, такие как поля приманки, требуют этого.

Итак, чтобы полностью ответить на ваш вопрос, если какое-либо взаимодействие с формой требует, чтобы вы отправляли только то, что видно, вы можете выполнить одно из следующих действий:

  • Переместить «видимые» элементы, чтобы они были дочерними элементами формы (предпочтительный способ), переместить их в другой родительский элемент, когда они не видны (после того, как анимация скроет их). Я думаю, это должен быть самый простой способ, особенно при использовании jquery. Помните, что для анимации перемещайте скрытые элементы к соответствующим родительским элементам, затем анимируйте. Кроме того, скрытыми элементами можно легко манипулировать с минимальной производительностью, поскольку браузер не пытается повторно отобразить их, пока они не станут видимыми в любом случае.
  • Очистить данные (потерять пользовательский ввод)
  • Очистите имена полей ввода и заново создайте имена, когда они не будут скрыты.

Третий метод немного перебор. Я бы сделал либо первое, либо второе, в зависимости от ваших конкретных потребностей, отдав предпочтение первому.

Ответ №3:

Чтобы сделать это короче и приятнее, используйте javascript для удаления поля. Это просто и быстро, и вам не придется расширять свой серверный скрипт, чтобы определить, что прошло. Если вы тоже хотите, сохраните удаленный HTML-код в глобальном var, чтобы при переключении опции скрипт возвращался. Надеюсь, это поможет!

Ответ №4:

Если форма просто становится явно скрытой, да, данные все равно будут отправлены, несмотря на то, что они были скрыты. Вам нужно очистить их с помощью JS.