Уявіть, у вас є форма, де ви перемикаєте видимість кількох полів. І якщо поле не відображається, ви не хочете, щоб його значення було в запиті.
Як ви вирішуєте цю ситуацію?
Відповіді:
Якщо встановити елемент форми у вимкненому стані, він зупинить його перехід на сервер, наприклад:
<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();
attr("disabled", true)
вас слід використовувати prop("disabled", true)
api.jquery.com/prop
.prop()
замість .attr()
рекомендується для отримання І встановлення як відключених, так і перевірених властивостей. Перевірка та налаштування за допомогою .attr()
в деяких випадках повертають небажані результати. Будь ласка, прочитайте документацію jQuery, перш ніж коментувати, на що посилався yorch.
Ви можете використовувати 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.
Одним дуже простим (але не завжди найзручнішим) рішенням є видалення атрибута "name" - стандарт вимагає, щоб браузери не надсилали неназвані значення, і всі браузери, яких я знаю, дотримуються цього правила.
:input
замість цьогоinput
ви також можете легко вимкнути всі елементиselect
таtextarea
елементи