Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Обработка чекбоксов, радио-кнопок, и селектов (https://javascript.ru/forum/dom-window/56415-obrabotka-chekboksov-radio-knopok-i-selektov.html)

dpts 15.06.2015 10:38

Цитата:

Сообщение от Sigizmund2012 (Сообщение 375119)
Это не вопрос предпочтений или конкретно вашей формы. Так должно быть по стандарту, данные отправляются на сервер в виде name&value. Как серверный скрипт корректно вашу форму обработает, если у вас name одинаковый? http://htmlbook.ru/html/input/name

Ну вообще-то серверный скрипт (asp+vbscript) спокойно считает количество переданных ему detail-ов и может обратиться к каждому detail, как к элементу массива (тоже самое с material-ами).
По-этому мне и надо, чтобы detail-ов было столькоже, сколько и material-ов.

Sigizmund2012 15.06.2015 10:46

Цитата:

Сообщение от dpts
если чекбокс отключаешь, уменьшается количество detail

Вот тут ничего конкретного не могу сказать, возможно если чекбокс не отмечен, его значение вообще на сервер не отправляется.

dpts 15.06.2015 10:50

Цитата:

Сообщение от Sigizmund2012 (Сообщение 375122)
Вот тут ничего конкретного не могу сказать, возможно если чекбокс не отмечен, его значение вообще на сервер не отправляется.

Похоже на то.

вот тогда и вопрос, как если чекбокс отключен, то соответствующий ему material тоже не отправлять на сервер, чтобы на червер приходили одинаковые количества detail и material&

dpts 15.06.2015 10:55

Еще вариант как передавать одинаковое количество
 
Еще, как вариант выхода
к каждому checkbox приделать input type="hidden" value="..."

и в зависимости от состояния соответствующего чекбокса менять value у hidden и на сервере обрабатывать массив hidden-ов.

Вотпрос, как менять value у hidden-ов?

Sigizmund2012 15.06.2015 11:14

Цитата:

Сообщение от dpts
Вотпрос, как менять value у hidden-ов?

Так же как и у не скрытых, например отсеять по querySelectorAll('input[type="hidden"]') и в цикле изменить checkboxes[i].value = 'true';

Sigizmund2012 15.06.2015 11:22

http://www.askdev.ru/question/3943/%...cked-checkbox/

dpts 15.06.2015 12:02

Цитата:

Сообщение от Sigizmund2012 (Сообщение 375126)

Если чекбокс отмечен, - отправляются 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 не передавал?


Часовой пояс GMT +3, время: 20:28.