Как избежать отправки полей ввода, которые скрыты display: none на сервер?
представьте, что у вас есть форма, в которой вы переключаете видимость нескольких полей. И если поле не отображается, вы не хотите, чтобы его значение было в запросе.
Как вы справляетесь с этой ситуацией?
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.