При выборе чекбокса заносить его значение в массив
Добрый день. Есть такой код html:
<div id="qwestion_40" class="question_item"> <b>Вопрос 2 (3 правильных варианта ответа - последовательность 5,2,3)</b> <div id="8" data-max="3" data-seq="1"> <input name="qw_40[seq]" value="1" type="hidden"> <input name="qw_40[cta]" value="3" type="hidden"> <div><input id="answer_40_57" value="57" class="chbx" name="qw_40[]" type="checkbox"> <label for="answer_40_57"><span></span>Ответ 1</label></div> <div><input id="answer_40_58" value="58" class="chbx" name="qw_40[]" type="checkbox"> <label for="answer_40_58"><span></span>Ответ 2 (true)</label></div> <div><input id="answer_40_59" value="59" class="chbx" name="qw_40[]" type="checkbox"> <label for="answer_40_59"><span></span>Ответ 3 (true)</label></div> <div><input id="answer_40_60" value="60" class="chbx" name="qw_40[]" type="checkbox"> <label for="answer_40_60"><span></span>Ответ 4</label></div> <div><input id="answer_40_61" value="61" class="chbx" name="qw_40[]" type="checkbox"> <label for="answer_40_61"><span></span>Ответ 5 (true)</label></div> </div> </div> Скажите, как мне при выборе чекбокса, заносить его значение в массив или например в скрытое поле input. Проблема в том, что мне нужно заносить последовательность выбранных чекбоксов. А значит, если пользователь передумал и какой-то чекбокс отменил, его значение должно удаляться из массива выбранных. Пытался таким кодом, но он не удаляет убранный пользователем чекбокс из последовательности: $(':checkbox').on('click', function() { var chbx = $(this); var seq = chbx.parent().parent().attr('data-seq'); if (seq == 1) { if (chbx.is(':checked')){ console.log(chbx.val()); } } }); |
Цитата:
|
Сейчас накропал такой код, вроде бы решает задачу, но хотел бы совета, может можно как-то улучшить?
var arr = []; $(":checkbox").on('click', function() { arr = $(":checkbox:checked").map(function(i,el){ return $(el).val(); }).get(); console.log(arr); }); |
Зачем набор выбранных флажков помещать в скрытое поле?
|
laimas, подскажите, а как мне потом этот массив отправить на сервер - я планировал через скрытый input - тупеж да?))
Скажите, как исправить код с поста №3: он у меня значения всегда по порядку отправляет в массив, а мне нужно именно в том порядке, как клика пользователь |
Цитата:
Цитата:
|
Цитата:
Подскажите мне - у меня мой код отправляет значения по порядку в массив - то есть они всегда выстроены там в порядке возрастания значений. А мне нужно в том порядке, как кликал пользователь. |
Цитата:
Скорее правильнее будет именовать флажки по индексу в наборе name="qw_40[1]" name="qw_40[2]" .... Скрытого поля не надо, а при выборе флажка помещать его вверх в форме, под последним выбранным. Если выбранный флажок сброшен, то он возвращается на свое место в форме - под полем чей индекс максимален но меньше чем у сброшенного. В этом случае в массиве на сервере значения ключей, это есть последовательность выбора флажков. |
laimas,
Вот такой код собирает правильно последовательность. В итоге имею массив со значениями в выбранном порядке. Но проблема в том, что таких блоков у меня на странице может быть несколько - как мне для каждого формировать свой массив последовательности? var checklist = []; $(':checkbox').on('click', function() { var val = this.value|0; // to int if (this.checked) { checklist.push(val); // если в начало, то .ushift(val) } else { var idx = $.inArray(val, checklist); if( idx > -1 ){ checklist.splice(idx, 1); } } console.log(checklist); }); |
Batyabest,
а то что этот способ полная профанация, мысль не посещает? ;) Надо полагать, что последовательность 5,2,3, это не прихоть, а номера вариантов ответов. А значит северу важно знать именно их. По уму, хотя я и не знаю что значат значения флажков, но сервер обязан знать, что 1, это 55, а 2, это 79. И ему от клиента эти значения не нужны, зная ключи этих значений он всегда сможет получить сами значения если надо. Значит value флажков должны содержать значения ключей, а имена без индексов. Тогда значения массивов и будет порядком выбора. Скрытым полем или как я предлагал, решайте сами. Но пользователю соблюсти последовательность и не видеть ее при этом (ведь варианты то он может менять) разве удобно? А вот если выбранные располагать согласно последовательности набора, это будет наглядно. |
Часовой пояс GMT +3, время: 23:35. |