Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 11.02.2018, 21:37
Профессор
Отправить личное сообщение для Batyabest Посмотреть профиль Найти все сообщения от Batyabest
 
Регистрация: 14.09.2013
Сообщений: 252

laimas,
Все верно - в заголовке я просто указал для себя правильную последовательность ответов, на сервер же конечно должны приходить ID ответов, причем желательно в том порядке, что указано. А для этого мне нужно собрать массив для каждой такой группы чекбоксов, и отправить их на сервер, хоть строкой, хоть как, не принципиально. Поэтому и решил загнать их в скрытый инпут и отправить.
Проблема у меня в том, что код
var checked = [];
                            $(':checkbox').on('click', function() {
                              var chbx = $(this);
                              var seq = chbx.parent().parent().attr('data-seq');
                              var sel_list_seq = chbx.parent().parent().children('.sel_seq_list');
                              if (seq == 1) {
                                if (chbx.is(':checked')) {
                                  checked.push(chbx.val());
                                } else {
                                  var index = checked.indexOf(chbx.val());
                                  if (index != -1)
                                    checked[index] = null;
                                  checked = checked.filter(item => item != null);
                                }
                                sel_list_seq.val(checked);
                                console.log(JSON.stringify(checked));
                              }
                            });

делая все правильно со второго и последующих вопросов все варианты ответов загоняет в один массив checked, а нужно чтобы у каждого вопроса был свой массив.
Что я только не делал, чтобы решить вопрос, например собрал все вопросы, у которых дата атрибут data-seq=1 (то есть в этих вопросах важна последовательность ответа), потом собрал с них id и вот тут никак не получается создать массив с индексов по id вопроса, например checked['question_49']? checked['quesion_58']/ Или может есть другое изящное решение? Помогите мне пожалуйста.
Ответить с цитированием
  #12 (permalink)  
Старый 11.02.2018, 21:43
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Если собирать, то должно быть так:

событие изменения флажка -> очищаем массив -> итерация всех флажков -> выбранный флажок в массив

А $.after/$.before просто бы перемещала флажки в поле, и сервер получил бы и что выбрали, и в каком порядке.
Ответить с цитированием
  #13 (permalink)  
Старый 11.02.2018, 21:50
Профессор
Отправить личное сообщение для Batyabest Посмотреть профиль Найти все сообщения от Batyabest
 
Регистрация: 14.09.2013
Сообщений: 252

laimas,
А как создать массивы для каждого из вопросов, где требуется последовательность? Чтобы потом в них заносить данные?
Ответить с цитированием
  #14 (permalink)  
Старый 11.02.2018, 21:56
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Batyabest
А как создать массивы для каждого из вопросов
Зачем, если элементы формы и есть массив готовый, а правила должен задавать сервер.

Я не понимаю всех страданий и зачем они нужны. Масса id, к чему, зачем... Вы не усложняете решение?
Ответить с цитированием
  #15 (permalink)  
Старый 11.02.2018, 22:09
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Видимо я понял суть - важно знать последовательность набора, а также важно, чтобы пользователь об этой последовательности не подозревал?
Ответить с цитированием
  #16 (permalink)  
Старый 12.02.2018, 09:39
Профессор
Отправить личное сообщение для Batyabest Посмотреть профиль Найти все сообщения от Batyabest
 
Регистрация: 14.09.2013
Сообщений: 252

Сообщение от laimas Посмотреть сообщение
Видимо я понял суть - важно знать последовательность набора, а также важно, чтобы пользователь об этой последовательности не подозревал?
Да, все верно.
Это тест, в котором у некоторых вопросов нужно не просто выбрать ответы, а выбрать их в правильном порядке. Естественно, пользователь подозревать не должен правильно он что-либо выбирает или нет.
Мой код собирает в массив, но в один, а мне нужно для каждого вопроса, где необходима последовательность собирать данные в свой массивчик, ведь таких вопросов на странице может быть несколько.
Помогите кодом пожалуйста, я уже весь измучился))
Потом на сервере эта последовательность сравнивается с правильной.
Ответить с цитированием
  #17 (permalink)  
Старый 12.02.2018, 10:36
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Batyabest
Мой код собирает в массив, но в один, а мне нужно для каждого вопроса, где необходима последовательность собирать данные в свой массивчик, ведь таких вопросов на странице может быть несколько.
Да не проблема собрать и в несколько, вот только они вам не помогут узнать реалии, если их так собирать. Поправьте если я не прав.

Допусти есть набор: 1, 2, 3, 4. Правильный ответ в этом наборе будет 1, 2, 4, и с обязательным порядком 4, 2, 1.

Вы пакуете выбор пользователя в массив, а он выбирает так: 1 - 3 - 4, затем сбрасывает флажки 3, 1. В массиве первым будет 4. Даже если после этого он выберет флажки 2 и 1, массив на сервере 4, 2, 1 ведь не говорит о том в какой последовательности происходил набор. Это скорее "подбирали ответ и угадали".

Если уж и готовить эти массивы, то они должны хранить всю историю набора, чтобы можно было серверу знать реалии. То есть, сброс флажка не означает, что его выбор, ранее помещенный в массив, удаляется из массива. А в случае выбора 3 из 4, достаточно запомнить в этом массиве три первых выбора. Если сервер получит в массиве 2, 1, 4, а сам набор флажков будет верным - 4, 2, 1, то сравнение этих двух массивов покажет, что студент на сессиях марки пива изучал, а не предмет.

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

Последний раз редактировалось laimas, 12.02.2018 в 10:44.
Ответить с цитированием
  #18 (permalink)  
Старый 12.02.2018, 10:46
Профессор
Отправить личное сообщение для Batyabest Посмотреть профиль Найти все сообщения от Batyabest
 
Регистрация: 14.09.2013
Сообщений: 252

laimas,
да, ваша мысль верная касательно "подбирали ответ и угадали", но у нас важно на данный момент, чтобы они в принципе правильную комбинацию выбрали, а если мы будем давать возможность отправлять только 3 первых выбора, то это лишает их подумать, ошибиться и исправиться)) в конце концов - "подобрать ответ и угадать"))
Если углубиться в терминологию, то наверное да, нужен набор, в том порядке как расставил пользователь.
Ответить с цитированием
  #19 (permalink)  
Старый 12.02.2018, 10:56
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Batyabest
у нас важно на данный момент, чтобы они в принципе правильную комбинацию выбрали
Ну тогда какой прок от дополнительных массивов? Почему не сделать так как я предлагал - выбранный флажок помещается вверх под последним выбранным (если такового нет, то первым). Сбрасываемый флажок помещается вниз (коли важно сделать правильный порядок, то порядок в форме сброшенных флажков не важен, серверу их все равно не получать).

Пусть как в примере значения флажков 1, 2, 3, 4. Если Порядок набора будет верен, то сервер получит массив:

qw_40 =>
0 => 4
1 => 2
2 => 1

Что будет свидетельствовать о том, что студент учил.
Ответить с цитированием
  #20 (permalink)  
Старый 12.02.2018, 11:04
Профессор
Отправить личное сообщение для Batyabest Посмотреть профиль Найти все сообщения от Batyabest
 
Регистрация: 14.09.2013
Сообщений: 252

Сообщение от laimas Посмотреть сообщение
Почему не сделать так как я предлагал - выбранный флажок помещается вверх под последним выбранным (если такового нет, то первым). Сбрасываемый флажок помещается вниз (коли важно сделать правильный порядок, то порядок в форме сброшенных флажков не важен, серверу их все равно не получать)
Здесь уже начинает играть фактор нашего директора, который просит, чтобы никуда ничего не перемещалось.
Поэтому я на данный момент нашел для себя только такое решение, но не могу сделать занесение в разные массивы. Код мой такой:

var checked = [];
                        
                        var item = $('.question_item').children('[data-seq="1"]');
                        
                        $(item).each(function() {
                            var quest_id = $(this).parent().attr('id');
                            checked.push(quest_id);      
                        });
                        
                            $(':checkbox').on('click', function() {
                              var chbx = $(this);
                              var seq = chbx.parent().parent().attr('data-seq');
                              var quest_id = chbx.parent().parent().parent().attr('id');
                              console.log(quest_id);
                              var sel_list_seq = chbx.parent().parent().children('.sel_seq_list');
                              if (seq == 1) {
                                if (chbx.is(':checked')) {
                                  checked.quest_id.push(chbx.val());
                                } else {
                                  var index = checked.indexOf(chbx.val());
                                  if (index != -1)
                                    checked[index] = null;
                                  checked = checked.filter(item => item != null);
                                }
                                sel_list_seq.val(checked);
                                console.log(JSON.stringify(checked));
                              }
                            });


То есть массивы я под каждый вопрос с последовательностью создаю, но потом почему-то в них ничего не заносится(((
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив из значений чекбоксов,максимальное значение и сумма результата с др. значе-ями Евгенион Общие вопросы Javascript 5 23.10.2017 07:44
заносить ли в массив ноды? Floyd Общие вопросы Javascript 4 27.10.2015 17:51
4 чекбокса, как при выборе вставить значение через запятую espltd Элементы интерфейса 2 09.09.2015 09:07
при выборе одного из input становится активными другая пара inputов Marmott Общие вопросы Javascript 5 25.07.2015 20:52
Действие при одновременном выборе в разных выпадающих списках Oresama Элементы интерфейса 1 28.06.2015 20:22