Muranx
@Muranx
кто понял this тот в цирке не смеётся

Как сделать тест знаний на чистом javascript?

Нужно помощь в корректировке кода javascript, чтобы сделать тест знаний, пример очень простой!

<div class="questionBlock_1">
  <p class="questionPole">Сколько тебе лет?</p>
      <div class="questionAnswer">
        <input class="some" type="radio" name="ast" value="12">12<br>
        <input class="some" type="radio" name="ast" value="34">34<br>
      </div><br>
  <input class="answerButton" id="answerButton" type="button" value="Ответ">
</div>

<div class="questionBlock_1">
  <p class="questionPole">Какого цвета небо?</p>
      <div class="questionAnswer">
        <input class="some" type="radio" name="ast" value="голубое">голубое<br>
        <input class="some" type="radio" name="ast" value="жёлтое">жёлтое<br>
      </div><br>
  <input class="answerButton" id="answerButton" type="button" value="Ответ">
</div>

var trueAnswers = [12, "жёлтое"]; //массив с правильными ответами на вопросы теста, ответы даны по порядку

var mass = document.querySelectorAll(".some"); // массив чек-боксов

var ab = document.querySelectorAll(".answerButton"); // массив кнопок


for(var k=0; k<trueAnswers.length; k++){

    if(mass[k].checked == true && mass[k].checked.value == trueAnswers[k]){
          ab[k].onclick = function(){
            alert("true")
          }
    }else{
          ab[k].onclick = function(){
            alert("false")
          }
  }
  
}

Нужна помощь в том, чтобы, при нажатии на клавишу "Ответ", программа пробегалась по массиву trueAnswers и в соответствии с этим выводила alert("true") или , если не правильно то соответственно "false". Ну думаю задача ясная как солнечный день, но вот чот решить её у меня не получается, да и времени нет, просьба писать ответы на чистом JS , если можно, то исправить мой код, указав на ошибки! Спасибо!
  • Вопрос задан
  • 853 просмотра
Пригласить эксперта
Ответы на вопрос 1
dollar
@dollar
Делай добро и бросай его в воду.
Я делаю все вопросы в отдельной структуре.
Примерно так
var data = [
	{
		name:'Психотип - это',
		radio:['темперамент','акцентуация','соционический тип','экстраверсия','архетип','характер','ничего из этого'],
		answer: 7,
	},
	{
		name:'Что позволяет игра с точки зрения социологов?',
		checkbox:['выразить себя','снять запреты','снять напряжение',],
		answer: 1 + 10, //+100
	},
	{
		name:'Что есть игра с точки зрения биогенетиков?',
		checkbox:['атавизм','приготовление к жизни','снятие напряжения',],
		answer: 1, // +10 +100,
	},
	// и так далее
];

А на экране показываю одновременно только один вопрос и кнопку "Дальше". То есть DOM формируется динамически. Причем, при показе вопроса варианты ответов перемешиваются (кроме вариантов "ничего из вышеперечисленного" и "всё вышеперечисленное", которые добавляются в конец).

Собственно, порядок вопросов тоже можно перемешать. Но здесь уже начинаются тонкости. Потому что некоторые вопросы стоит показывать в определенном порядке. А некоторые вопросы не стоит показывать вообще, если был дан неправильный ответ на определенный предыдущий вопрос. Не знаю, стоит ли вам заморачиваться так, как я.

К слову, тест знаний делать на js - так себе идея. Ведь шпаргалка открывается в два клика (или комбинацией Ctrl+U) и читается без навыков программирования. По уму вопросы и ответы должны перемешиваться на сервере, id ответов должны быть каждый раз произвольные типа fGx9PeL7, подсказки ответа в js коде не должно быть вообще (проверка ответа только на сервере), вопросы должны отдаваться не все сразу, а порциями через ajax, ну и на каждый вопрос должно отводиться ограниченное время. А если лимита времени нет, то придется физически стоять над душой респондента и смотреть, чтобы он не лез в Гугл за подсказками. Ведь тест знаний должен проверять знания в предметной области, а не хакерские способности или скорость гугления.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы