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

83

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

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

Ваш Ответ

6   ответов
123

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

<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();
@DanielRikowski, что?с этим jQuery здесь jQuery ерунда. Позволять'Ток Ваниль JS. Pacerier
@ dominicbri7 - Начиная с jQuery 1.6, используя.prop() вместо.attr() рекомендуется для получения И установки как отключенных, так и проверенных свойств. Проверка и или настройка с помощью.attr() в некоторых случаях возвращает нежелательные результаты. Пожалуйста, прочитайте документацию jQuery, прежде чем комментировать то, на что ссылался Йорк. zgr024
метод jquery работает для меню выбора? alex
С jQuery 'с псевдоселектором:input вместоinput Вы также можете легко отключить всеselect а такжеtextarea элементы Daniel Rikowski
7

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

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

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

Это очень хорошее решение, так как оно перебирает скрытый div и отключает все. это должно получить больше +1 yeppe
13

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

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

3

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

Не рекомендуется, потому что если вы изменяете состояния через javascript, вы вряд ли сможете сбросить входные данные без кэширования всех атрибутов имени. Это'S способ легче переключить отключенное состояние. Simon
5

Как насчет:

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

а также

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

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

Это отличное решение, если вы хотите получить все входные данные. хорошая работа doz87
1

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

Похожие вопросы