Исключить поля скрытой формы из submit
Я скрываю/показываю div на основе состояния флажка.
<input type="checkbox" id="other" name="os[other]" value="6" onclick="toggle_form_element('os[other]')">
Вот моя функция Javascript:
function toggle_form_element(id) {
if ((document.getElementsByName(id)[0].checked)) {
document.getElementById('sometimesHidden').style.display = 'block';
} else {
document.getElementById('sometimesHidden').style.display = 'none';
}
}
Это "иногдаHidden" div:
<div id="sometimesHidden">
<input type="text" size="20" id="other_os" name="other_os">
</div>
Теперь я хотел бы использовать мою функцию toggle_form_element также для исключения всех полей ввода в "скрытом" div из $_POST ['array'].
Но как я могу это сделать?
Ответы
Ответ 1
Вы можете добавить атрибут disabled в любые поля, которые вы не хотите отправлять.
function toggle_form_element(id) {
if ((document.getElementsByName(id)[0].checked)) {
document.getElementById('sometimesHidden').setAttribute("disabled", "disabled");
} else {
document.getElementById('sometimesHidden').removeAttribute("disabled");
}
}
Для решения jQuery:
// Disables all input, select & textarea tags within the .sometimesHidden div
if(checked) {
$("input, select, textarea", $(".sometimesHidden")).attr("disabled", "disabled");
}
else {
$("input, select, textarea", $(".sometimesHidden")).removeAttr("disabled");
}
Ответ 2
Вы можете напрямую установить свойство .disabled
в элементе:
function toggle_form_element(name) {
var state = document.getElementsByName(name)[0].checked;
document.getElementById('sometimesHidden').disabled = state;
}
Почти всегда лучше изменять свойства элемента, а не атрибуты, а семантика также понятна для булевых свойств.
Обратите внимание, что хотя MDN предполагает, что это свойство игнорируется в скрытых полях:
отключен
Этот Boolean атрибут указывает, что элемент управления формы недоступен для взаимодействия. В частности, событие клика не будет отправлено на отключенные элементы управления. Кроме того, отключенное значение управления не представляется с формой.
Этот атрибут игнорируется, если значение атрибута type скрыто.
тестирование в Chrome 27 показывает, что Chrome соблюдает атрибут disabled
и предотвращает отправку значений формы для полей hidden
.
Кроме того, W3C spec не делает такого различия. Он просто говорит, что "Элементы управления disabled
не могут быть успешными".