V
V
Valery2021-06-22 12:50:17
JavaScript
Valery, 2021-06-22 12:50:17

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

1 answer(s)
A
Andrew Ghostuhin, 2021-06-22
@Torin_Asakura

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

she counts the number of all selected options, this is substituted into the formula instead of the denominator, i.e. if we again take the example above where we check all 4 checkboxes and there is a correct one among them, then he will not say that we are supermind and 100% everything is correct, but he will compare this with the new variable, and the result will be 25%
Since we have up to of this there is an alert where it is shown how many of how many correct answers we have chosen, it looks even more logical
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 question

Ask a Question

731 491 924 answers to any question