Исключить поля скрытой формы из 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 не могут быть успешными".