Сейчас процент вычисляется как (Выбранные правильные ответы)/(Все правильные ответы), типа если у нас из 4 возможных вариантов 1 правильный - то у нас возможны только 2 ситуации: (0/1) - это когда правильный ответ не выбран и (1/1) - когда выбран, при этом не берутся в учёт остальные выбранные варианты, т.е - мы можем чекнуть все 4 из 4 вариантов и в формуле будет (1/1*100), т.е. 100%
я добавил переменную
const selectedAnswersCounts = listCheckbox.filter(checkbox => checkbox.checked).length
она считает количество всех выбранных вариантов, это подставляется в формулу вместо знаменателя, т.е. если опять брать пример выше где мы чекаем все 4 чекбокса и среди них есть правильный то он не будет говорить что мы сверхразум и 100% все правильно, а он сравнит это как раз с новой переменной, и результатом будет 25%
Так как у нас до этого идет алёрт где показывается сколько из скольки правильных ответов мы выбрали это смотрится еще более логично
const form = document.querySelector('#form')
form.addEventListener('submit', onSubmit)
function onSubmit (event) {
event.preventDefault()
let listCheckbox = document.querySelectorAll('.i-6')
listCheckbox = [...listCheckbox]
const selectedAnswersCounts = listCheckbox.filter(checkbox => checkbox.checked).length
// Проверяем выбран ли хотябы один ответ
if (!listCheckbox.some(checkbox => checkbox.checked)) {
alert('Вы не выбрали ни одного ответа')
}
else{
form.addEventListener('submit', onSubmit)
alert('Вы подтверждаете действие?');
}
// Узнаем сколько всего правильных ответов
const rightAnswersCount = listCheckbox.filter(checkbox => Number(checkbox.value) === 1).length
// Узнаем сколько всего не правильных ответов
const wrongAnswerCount = listCheckbox.length - rightAnswersCount
// Узнаем количество правильных ответов
const rightAnswers = listCheckbox.filter(checkbox => Number(checkbox.value) === 1 && checkbox.checked).length
// Узнаем количество не правильных ответов
const wrongAnswer = listCheckbox.filter(checkbox => Number(checkbox.value) === 0 && checkbox.checked).length
// Уведомляем пользователя
alert(`Вы выбрали ${rightAnswers} вариантов из ${rightAnswersCount} правильных`);
/*alert(`Вы ответили не правильно на ${wrongAnswer} из ${wrongAnswerCount}`)*/
//Вывод ответа с процентами
alert(`Процент правильных ответов: ${(rightAnswers / selectedAnswersCounts) * 100}`);
/*alert(`Процент неправильных ответов: ${(wrongAnswer / wrongAnswerCount) * 100}`)*/
}
/* Скрипт правильных и неправильных ответов */
let button = document.getElementById('btn-1');
button.addEventListener('click', function(e) {
document.querySelectorAll('.i-6').forEach(item => {
let checkbox = item.closest('div');
if (item.checked && Number(item.value)) {
checkbox.classList.add("right");
checkbox.classList.remove("false");
} else if (item.checked) {
checkbox.classList.add("false");
checkbox.classList.remove("right");
} else {
chekcbox.classList.remove("right");
chekcbox.classList.remove("false");
}
})
});