Рандом вопросов мини-теста
Здравствуйте!
У меня есть программа теста. Как мне сделать так, чтобы вопросы каждый раз были в разном порядке?
<h2>Тестирование</h2>
<div class="jumbotron"> <hr />
<div id="question1" style=" display:block;">
<p>Вопрос 1</p>
<p><span id="quest_1"></span> <input type="text" onkeyup="check();" id="answer_1"></p></div>
<div id="question2" style=" display:none;">
<p>Вопрос 6</p>
<p><span id="quest_2"></span> <input type="text" onkeyup="check();" id="answer_2"></p> </div>
<div id="question3" style=" display:none;">
<p>Вопрос 3</p>
<p><span id="quest_3"></span> <input type="text" onkeyup="check();" id="answer_3"></p></div>
<div id="question4" style=" display:none;">
<p>Вопрос 4</p>
<p>
<span id="quest_4"></span><br />
<input type="radio" name="q_4" value="1" onkeyup="check();" id="answer_4" /><span>ответ1</span><br>
<input type="radio" name="q_4" value="0" onkeyup="check();" id="answer_4" /><span>ответ2</span><br>
<input type="radio" name="q_4" value="0" onkeyup="check();" id="answer_4" /><span>ответ3</span> </p></div>
<div id="question9" style=" display:none;">
<p>Вопрос 5</p>
<p><span id="quest_5"></span><br />
<input type="radio" name="q_5" value="1" onkeyup="check();" id="answer_5" /><span> ответ1</span><br>
<input type="radio" name="q_5" value="0" onkeyup="check();" id="answer_5" /><span>ответ2</span><br>
<input type="radio" name="q_5" value="0" onkeyup="check();" id="answer_5" /><span> ответ3</span></p></div>
<div id="question6" style=" display:none;">
<button id="but_next" class="btn btn-default" disabled="disabled" onclick="next_question();">Следующий вопрос</button>
<button id="but_verify" style="display:none;" class="btn btn-default" onclick="verify();">Проверить</button>
<div id="rezult"></div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function () {
document.getElementById('quest_1').innerHTML = question_1;
document.getElementById('quest_2').innerHTML = question_2;
document.getElementById('quest_3').innerHTML = question_3;
document.getElementById('quest_4').innerHTML = question_4;
document.getElementById('quest_5').innerHTML = question_5;
})
function next_question() {
if (document.getElementById('question5').style.display == "block") {
document.getElementById('question5').style.display = "none";
document.getElementById('question6').style.display = "block";
document.getElementById('but_next').disabled = true;
document.getElementById('but_next').style.display = "none";
document.getElementById('but_verify').style.display = "block";
}
if (document.getElementById('question4').style.display == "block") {
document.getElementById('question4').style.display = "none";
document.getElementById('question5').style.display = "block";
document.getElementById('but_next').disabled = true;
}
if (document.getElementById('question3').style.display == "block") {
document.getElementById('question3').style.display = "none";
document.getElementById('question4').style.display = "block";
document.getElementById('but_next').disabled = true;
}
if (document.getElementById('question2').style.display == "block") {
document.getElementById('question2').style.display = "none";
document.getElementById('question3').style.display = "block";
document.getElementById('but_next').disabled = true;
}
if (document.getElementById('question1').style.display == "block") {
document.getElementById('question1').style.display = "none";
document.getElementById('question2').style.display = "block";
document.getElementById('but_next').disabled = true;
}
}
function check() {
if ($('input[id^="answer_"]').val() != '')
$('#but_next').removeAttr('disabled');
else $('#but_next').attr('disabled', 'disable');
$("input[type=radio]").on("change", function () {
$("button").prop("disabled", false);
});
}
function verify() {
answ_1 = document.getElementById('answer_1').value;
answ_student_1 = answ_1;
answ_1 = kodirov(answ_1);
answ_2 = document.getElementById('answer_2').value;
answ_student_2 = answ_2;
answ_2 = kodirov(answ_2);
answ_3 = document.querySelector('input[id="answer_3"]:checked').value;
answ_student_3 = document.querySelector('input[id="answer_3"]:checked').nextElementSibling.innerText;
answ_4 = document.querySelector('input[id="answer_4"]:checked').value;
answ_student_4 = document.querySelector('input[id="answer_4"]:checked').nextElementSibling.innerText;
answ_5 = document.querySelector('input[id="answer_5"]:checked').value;
answ_student_5 = document.querySelector('input[id="answer_5"]:checked').nextElementSibling.innerText;
count = 0;
count_theory = 0;
count_practice = 0;
ball = 0;
document.getElementById('question10').style.display = "none";
document.getElementById('but_verify').style.display = "none";
if (answ_1 == correct_answer_1) {
count++;
all_answers += "<br><span id='vo'>Вопрос 1." + question_1 + "<br>Ваш ответ: " + answ_student_1 + "<br>Вы ответили верно" + "</span><br>";
} else {
all_answers += "<br><span id='nvo'>Вопрос 2.Вы ответили не верно" + "</span><br>";
}
if (answ_2 == correct_answer_2) {
count++;
all_answers += "<br><span id='vo'>Вопрос 2." + question_2 + "<br>Ваш ответ: " + answ_student_2 + "<br>Вы ответили верно" + "</span><br>";
} else {
all_answers += "<br><span id='nvo'>Вопрос 2.Вы ответили не верно" + "</span><br>";
}
if (answ_3 == correct_answer_3) {
count++;
all_answers += "<br><span id='vo'>Вопрос 3." + question_3 + "<br>Ваш ответ: " + answ_student_3 + "<br>Вы ответили верно" + "</span><br>";
} else {
all_answers += "<br><span id='nvo'>Вопрос 3.Вы ответили не верно" + "</span><br>";
}
if (answ_4 == '1') {
count++;
all_answers += "<br><span id='vo'>Вопрос 4." + question_4 + "<br>Ваш ответ: " + answ_student_4 + "<br>Вы ответили верно" + "</span><br>";
} else {
all_answers += "<br><span id='nvo'>Вопрос 4.Вы ответили не верно" + "</span><br>";
}
if (answ_5 == '1') {
count++;
all_answers += "<br><span id='vo'>Вопрос 5." + question_5 + "<br>Ваш ответ: " + answ_student_5 + "<br>Вы ответили верно" + "</span><br>";
} else {
all_answers += "<br><span id='nvo'>Вопрос 5.Вы ответили не верно" + "</span><br>";
}
total = 5;
procent_total = count / total * 100;
procent_total = procent_total.toFixed();
document.getElementById('rezult').innerHTML = "Вы набрали " + ball + " баллов из "+ total_ball + "<br>Задания выполнены верно на " + procent_total + " %. " +"</span > <br><div class='progress'><div class='progress-bar' role='progressbar' style='width: " + procent_total + "%' aria-valuenow='" + procent_total + "' aria-valuemin='0' aria-valuemax='100'></div></div><span id='ot'>" + "</span><br><br><br>" + all_answers;
}
</script>
сами вопросы и правильные ответы на те, которые типа text, хранятся в отдельном файле в переменных, например так: question_1 = "Вопрос 1" правильный ответ на вопросы типа radio помечены value="1" |
RIMINI,
создайте массив вопросов и ответов, от него и пляшите. https://javascript.ru/forum/misc/762...tml#post500647 потом можно перемешать массив перед выводом. |
попробуйте поменять подход
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div class="main"></div>
</body>
</html>
<script>
const arr=[];
arr.push({id:1,question:'вопрос 1', level:1, correctAnswer:2, answer:['ответ 1 на 1','ответ 2 на 1','ответ 3 на 1','ответ 4 на 1']})
arr.push({id:2,question:'вопрос 2', level:1, correctAnswer:4, answer:['ответ 1 на 2','ответ 2 на 2','ответ 3 на 2','ответ 4 на 2']})
arr.push({id:3,question:'вопрос 3', level:1, correctAnswer:1, answer:['ответ 1 на 3','ответ 2 на 3','ответ 3 на 3','ответ 4 на 3']})
arr.push({id:4,question:'вопрос 4', level:1, correctAnswer:3, answer:['ответ 1 на 4','ответ 2 на 4','ответ 3 на 4','ответ 4 на 4']})
arr.sort(()=>Math.random() - 0.5)
for(let i=0;i<2 && i<arr.length-1;i++) {
const item=arr[i]
const ellAnswer=`<select onchange="choice(${item.id},this.options[this.selectedIndex].value)">${item.answer
.map((a,ii)=>`<option value="${ii}">${a}</option>`)
.join('')}</select>`
const allBlock=`<div id="question${item.id}">
<div>${item.question}</div>
<div>${ellAnswer}</div>
<div class="correctAnswer">ответ не выбран</div>
<div>=====================</div>
</div>`
const ell=document.createElement('div')
ell.innerHTML=allBlock
document.querySelector('div.main')
.appendChild(ell)
}
function choice(id,n) {
document.querySelector(`div#question${id} div.correctAnswer`).textContent=`на вопрос ${id} получен ответ ${n}`
// здесь нам известно id вопроса и n ответа, ищем в массиве элемент вопрос и сравниваем n с correctAnswer
//https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/find
}
</script>
|
| Часовой пояс GMT +3, время: 02:31. |