Как избежать отправки полей ввода, которые скрыты отображением: нет на сервер?

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

Как вы справляетесь с этой ситуацией?

Ответы на вопрос(6)

ние" Атрибут - стандарт требует, чтобы браузеры не отправляли безымянные значения, и все известные мне браузеры соблюдают это правило.

 Simon06 дек. 2013 г., 11:42
Не рекомендуется, потому что если вы изменяете состояния через javascript, вы вряд ли сможете сбросить входные данные без кэширования всех атрибутов имени. Это'S способ легче переключить отключенное состояние.
Решение Вопроса

он перестанет отправляться на сервер, например:

<input disabled="disabled" type="text" name="test">

В JavaScript это будет означать что-то вроде этого:

var inputs = document.getElementsByTagName('input');
for(var i = 0;i < inputs.length; i++) {
    if(inputs[i].style.display == 'none') {
        inputs[i].disabled = true;
    }
}
document.forms[0].submit();

В jQuery:

   $('form > input:hidden').attr("disabled",true);
   $('form').submit();
 dominicbri715 авг. 2013 г., 20:26
@ zgr024 отлично, удалил мой комментарий
 Pacerier27 янв. 2015 г., 06:52
@DanielRikowski, что?с этим jQuery здесь jQuery ерунда. Позволять'Ток Ваниль JS.
 alex01 окт. 2014 г., 22:18
метод jquery работает для меню выбора?
 zgr02414 авг. 2013 г., 21:07
@ dominicbri7 - Начиная с jQuery 1.6, используя.prop() вместо.attr() рекомендуется для получения И установки как отключенных, так и проверенных свойств. Проверка и или настройка с помощью.attr() в некоторых случаях возвращает нежелательные результаты. Пожалуйста, прочитайте документацию jQuery, прежде чем комментировать то, на что ссылался Йорк.
 Daniel Rikowski29 дек. 2012 г., 12:17
С jQuery 'с псевдоселектором:input вместоinput Вы также можете легко отключить всеselect а такжеtextarea элементы
 yorch07 мар. 2013 г., 19:11
В jQuery>= 1,6 вместоattr("disabled", true) вы должны использоватьprop("disabled", true) api.jquery.com/prop

том родительском элементе, вы можете использовать

$("div").filter(":hidden").children("input[type='text']").attr("disabled", "disabled");

Этот примерhttp://jsfiddle.net/gKsTS/ отключает все текстовые поля внутри скрытого div

 yeppe08 нояб. 2016 г., 08:06
Это очень хорошее решение, так как оно перебирает скрытый div и отключает все. это должно получить больше +1

либо отключил входной объект из DOM, чтобы он нене существует для публикации в первую очередь.

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

Однако я бы посоветовал не делать этого вообще. Если возможно, вы должны отфильтровать ваш запрос на сервере. Это будет более надежным.

Как насчет:

$('#divID').children(":input").prop("disabled", true); // disable

а также

$('#divID').children(":input").prop("disabled", false); // enable

Переключение всех дочерних входов (выбор, флажки, ввод, текстовые области и т. Д.) Внутри скрытого элемента div.

 doz8729 сент. 2016 г., 04:53
Это отличное решение, если вы хотите получить все входные данные. хорошая работа

Ваш ответ на вопрос