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


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

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

6 82

6 ответов:

установка отключенного элемента формы остановит его переход на сервер, например:

<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();

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

, Я бы посоветовал не делать этого вообще. По возможности следует отфильтровать запрос на сервере. Это будет более надежно.

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

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

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

о:

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

и

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

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

одно очень простое (но не всегда самое удобное) решение-удалить атрибут "имя" - стандарт требует, чтобы браузеры не отправляли неназванные значения, и все браузеры, которые я знаю, соблюдают это правило.

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