Answer the question
In order to leave comments, you need to log in
Why is the script not working?
Maybe I created a stupid topic, but I created it anyway. There is a test or questionnaire (call it whatever you like). I posted a questionnaire on fornex, the script worked, but at one fine moment it stopped working. And not on the server everything works fine. What's wrong, can you help? This is probably a stupid question. Just don't scold!
<form method="POST" action="#" id="form">
<section class="table_1">
<table class="iksweb" name="checkbox">
<tbody>
<tr>
<td rowspan="3"><b>История компании «Mc donald's»</b>
<h3 class="the">Кто основал компанию «Mc donald's»?</h3>
<section class="conteiner">
<div class="checkbox">
<input type="checkbox" class="i-6" id="i6" value="0" name="formDoor[]">
<label for="i6" tabindex="12">Роналд Макдоналд</label>
</div>
<div class="checkbox">
<input type="checkbox" class="i-6" id="i7" value="0" name="formDoor[]">
<label for="i7" tabindex="13">Рэй Крок</label>
</div>
<div class="checkbox">
<input type="checkbox" class="i-6" id="checkbox_68" value="1" name="formDoor[]">
<label for="checkbox_68" tabindex="14">Братья Дик и Мак Макдоналд</label>
</div>
<div class="checkbox">
<input type="checkbox" class="i-6" id="checkbox_170" value="0" name="formDoor[]">
<label for="checkbox_170" tabindex="14">Клинт Иствуд</label>
</div>
<div class="out-block out-6"></div>
</section>
</td>
</tr>
</tbody>
</table>
</section>
<div class="dsw">
<button class="b-6" tabindex="11" id="btn-1" type="submit" name="formSubmit">Результат</button>
<div>
</form>
/* Главный скрипт формы (опросника) */
const form = document.querySelector('#form')
form.addEventListener('submit', onSubmit)
function onSubmit (event) {
event.preventDefault()
let listCheckbox = document.querySelectorAll('.i-6')
listCheckbox = [...listCheckbox]
// Проверяем выбран ли хотябы один ответ
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 / rightAnswersCount) * 100}`);
/*alert(`Процент неправильных ответов: ${(wrongAnswer / wrongAnswerCount) * 100}`)*/
}
/* Скрипт правильных и неправильных ответов */
let button = document.getElementById('btn-1');
button.addEventListener('click', function(e) {
document.querySelectorAll('.i-6').forEach(item => {
let chekcbox = item.closest('div');
if (item.checked && Number(item.value)) {
chekcbox.classList.add("right");
chekcbox.classList.remove("false");
} else if (item.checked) {
chekcbox.classList.add("false");
chekcbox.classList.remove("right");
} else {
chekcbox.classList.remove("right");
chekcbox.classList.remove("false");
}
})
});
Answer the question
In order to leave comments, you need to log in
Now the percentage is calculated as (Selected correct answers) / (All correct answers), such as if we have 1 correct out of 4 possible options, then we have only 2 situations: (0/1) - this is when the correct answer is not selected and (1 /1) - when selected, other selected options are not taken into account, i.e. - we can check all 4 out of 4 options and the formula will be (1/1*100), i.e. 100%
i added a variable
const selectedAnswersCounts = listCheckbox.filter(checkbox => checkbox.checked).length
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");
}
})
});
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question