Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.08.2020, 01:35
Аспирант
Отправить личное сообщение для maplol123@gmail.com Посмотреть профиль Найти все сообщения от maplol123@gmail.com
 
Регистрация: 30.06.2019
Сообщений: 41

Правильная проверка чекбоксов
Вот у меня есть какой-то список вопросов, с правильными вариантами ответов (correct)
[
  {
    "question": "123",
    "answers": [
      "1231",
      "1231",
      "123",
      "124"
    ],
    "correct": [2]
  },
  {
    "question": "124214",
    "answers": [
      "12312",
      "12321",
      "123213"
    ],
    "correct": [1]
  },
  {
    "question": "2152",
    "answers": [
      "12512",
      "125215",
      "121421",
      "124124"
    ],
    "correct": [1, 2, 4]
  },
  {
    "question": "12412521",
    "answers": [
      "15125125",
      "125125",
      "125125"
    ],
    "correct": [1, 2, 3]
  }
]

Я беру этот .json файл из сервера. Проверяю айди чекбокса по номеру из correct
let inp;
let answered = document.getElementById("answered");
let allque = document.getElementById("allque");
answered.value = 0;
////взятие файла с сервера
function checkright() {
  fetch("http://localhost:3000/public/data.json")
    .then((response) => {
      return response.json();
    })
////сама проверка чекбоксов
    .then((data) => {
      for (let i = 0; i < data.length; i++) {
        for (let j = 0; j < data[i].question.length; j++) {
          inp = document.getElementById(i + "_" + j);
          if (inp && inp.checked) {
            if (j + 1 == data[i].correct[j]) {
              answered.value++;
            } else {
              answered.value = 0;
            }
          }
        }
      }
      console.log(answered.value);
    });
}

В итоге, у меня на некоторых ответах, которые начинаются не с 1, неправильно проверяет и выводит результат = 0. Как сделать правильную проверку, и там, где более 2х вариантов правильных, засчитывало один балл?

Последний раз редактировалось maplol123@gmail.com, 22.08.2020 в 01:42.
Ответить с цитированием
  #2 (permalink)  
Старый 22.08.2020, 01:39
Аспирант
Отправить личное сообщение для maplol123@gmail.com Посмотреть профиль Найти все сообщения от maplol123@gmail.com
 
Регистрация: 30.06.2019
Сообщений: 41

тут немного другие вопросы, так как сгенерировались рандомно
<body>
  <div>
    <h3>124214</h3>
    <input type="checkbox" id="0_0">12412<br>
    <input type="checkbox" id="0_1">12412<br>
    <input type="checkbox" id="0_2">1214<br>
    <input type="checkbox" id="0_3">12421<br>
    <hr>
</div>
<div>
    <h3>124214</h3>
    <input type="checkbox" id="1_0">12412<br>
    <input type="checkbox" id="1_1">124214<br>
    <input type="checkbox" id="1_2">124214<br>
    <hr>
</div>
<div>
    <h3>12421421</h3>
    <input type="checkbox" id="2_0">12421421<br>
    <input type="checkbox" id="2_1">1242141<br>
    <input type="checkbox" id="2_2">1242141<br>
    <input type="checkbox" id="2_3">112312<br>
    <hr>
</div>
<div>
    <h3>124124</h3>
    <input type="checkbox" id="3_0">124124124<br>
    <input type="checkbox" id="3_1">12412421<br>
    <input type="checkbox" id="3_2">1124214<br>
    <input type="checkbox" id="3_3">12412421<br>
    <hr>
</div>
<button onclick=" checkright()">Ответить</button>
<p>Отвечено: <output id="answered">0</output> /
    <output id="allque">из </output>
</p>

<script type="text/javascript" src="js/app.js"></script>

</body>

Последний раз редактировалось maplol123@gmail.com, 22.08.2020 в 01:43.
Ответить с цитированием
  #3 (permalink)  
Старый 22.08.2020, 16:33
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

maplol123@gmail.com,
let inp;
let answered = document.getElementById("answered");
let allque = document.getElementById("allque");
answered.value = 0;
////взятие файла с сервера
function checkright() {
  fetch("http://localhost:3000/public/data.json")
    .then((response) => {
      return response.json();
    })
////сама проверка чекбоксов
    .then((data) => {
      inp = Array.from(document.querySelectorAll("div"),
      div => Array.from(div.querySelectorAll('[type="checkbox"]'),
      ({checked}, i) => checked ? ++i : 0)
      .filter(a => a));
      answered.value = data.filter(({correct}, i) => JSON.stringify(correct) === JSON.stringify(inp[i])).length
      allque.value = `из ${data.length}`;
      console.log(answered.value);
    });
}
Ответить с цитированием
  #4 (permalink)  
Старый 22.08.2020, 22:35
Аспирант
Отправить личное сообщение для maplol123@gmail.com Посмотреть профиль Найти все сообщения от maplol123@gmail.com
 
Регистрация: 30.06.2019
Сообщений: 41

рони, спасибо огромное!
Ответить с цитированием
  #5 (permalink)  
Старый 23.08.2020, 00:48
Аспирант
Отправить личное сообщение для maplol123@gmail.com Посмотреть профиль Найти все сообщения от maplol123@gmail.com
 
Регистрация: 30.06.2019
Сообщений: 41

рони,
и, извините за наглость, можете ли написать, чтоб как-то div с неправильным ответом выделялся, например, backgroundColor: red?
Ответить с цитированием
  #6 (permalink)  
Старый 23.08.2020, 01:04
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

maplol123@gmail.com,
let inp;
let answered = document.getElementById("answered");
let allque = document.getElementById("allque");
answered.value = 0;
////взятие файла с сервера
function checkright() {
  fetch("http://localhost:3000/public/data.json")
    .then((response) => {
      return response.json();
    })
////сама проверка чекбоксов
    .then((data) => {
      const divs = document.querySelectorAll("div");
      inp = Array.from(divs,
      div => Array.from(div.querySelectorAll('[type="checkbox"]'),
      ({checked}, i) => checked ? ++i : 0)
      .filter(a => a));
      answered.value = data.filter(({correct}, i) => JSON.stringify(correct) === JSON.stringify(inp[i]) || divs[i].classList.add('red')).length
      allque.value = `из ${data.length}`;
      console.log(answered.value);
    });
}
Ответить с цитированием
  #7 (permalink)  
Старый 23.08.2020, 19:28
Аспирант
Отправить личное сообщение для maplol123@gmail.com Посмотреть профиль Найти все сообщения от maplol123@gmail.com
 
Регистрация: 30.06.2019
Сообщений: 41

рони,
Большое спасибо!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Посчитать значения группы чекбоксов etulpan Общие вопросы Javascript 2 11.02.2017 01:59
Посчитать значения чекбоксов sergylt Общие вопросы Javascript 12 08.02.2016 00:34
Правильная проверка поддержки того или иного события zhurchik Events/DOM/Window 4 16.04.2015 20:03
проверка формы не работает в ie begelme Javascript под браузер 6 13.08.2013 01:00
Проверка встроенной поддержки типа с помощью библиотеки Modernizr viy.li Библиотеки/Тулкиты/Фреймворки 3 15.06.2013 15:48