Показать сообщение отдельно
  #17 (permalink)  
Старый 15.06.2015, 12:02
Кандидат Javascript-наук
Отправить личное сообщение для dpts Посмотреть профиль Найти все сообщения от dpts
 
Регистрация: 12.05.2015
Сообщений: 111

Сообщение от Sigizmund2012 Посмотреть сообщение
http://www.askdev.ru/question/3943/%...cked-checkbox/
Если чекбокс отмечен, - отправляются 2 значения, и из чекбокса и из хиддена.

Мне предложили вроде рабочее решение, выглядит так:
var details = zakaz.detail;
for (var i = 0; i < details.length; i++) {
    details[i].addEventListener('change', function () {
        var td = closest(this, function (el) {
            return el.tagName.toLowerCase() == 'td';
        });
        var material = td.nextElementSibling.querySelector('[name=material]');
        material.disabled = !this.checked;
    }, false);
}

function closest(el, fn) {
    while (el) {
        if (fn(el)) return el;
        el = el.parentNode;
    }
}

Если отключается чекбокс, отключается и material. вроде все хорошо, все работает (чекбокс - не передается, материал - тоже не передается). Но сразу не подумал.
Обработчику же должен передаваться массив из detail-ов, detailmod-ов, material-ов.
Поэтому пришлось к левому и правому рукавам добавить еще input type="hidden" name="detailmod" value="0".

Как надо дописать приведенный JS, чтобы он еще и detailmod не передавал?
Ответить с цитированием