I'm trying to make simple javascript quiz with like 10 questions, and show random 5 on each page load.
I have following code for questions:
var mojaPitanja = [
{
tekst: "What is the color of the sky?",
odgovori: {
a: 'Blue',
b: 'Red',
c: 'Green'
},
indeks_korektnog_odgovora: 'a'
},
{
tekst: "In which country is located town Rome?",
odgovori: {
a: 'France',
b: 'Austria',
c: 'Italy'
},
indeks_korektnog_odgovora: 'c'
},
{
tekst: "Who was Elvis Presley?",
odgovori: {
a: 'Singer',
b: 'Writer',
c: 'Dancer'
},
indeks_korektnog_odgovora: 'a'
}
...................
];
Out of that list (with 10 questions) I want to get 5 random questions and show them on page.
This is the other part of the code I'm using to show the whole quiz on my page:
function generisiKviz(teksts, quizContainer, rezContainer, posaljiDugme){
function prikazPitanja(teksts, quizContainer){
// prostor za output i opcije odgovora
var output = [];
var odgovori;
// za svako pitanje...
for(var i=0; i<teksts.length; i++){
// prvo resetujemo listu odgovora
odgovori = [];
// za svaku opciju odgovora na dato pitanje...
for(letter in teksts[i].odgovori){
// ...dodajemo radio button
odgovori.push(
'<label>'
+ '<input type="radio" name="tekst'+i+'" value="'+letter+'">'
+ letter + ': '
+ teksts[i].odgovori[letter]
+ '</label>'
);
}
// dodajemo specificno pitanje i odgovore za dato pitanje
output.push(
'<div class="pitanje"><div class="tekst">' + teksts[i].tekst + '</div>'
+ '<div class="odgovori">' + odgovori.join('') + '</div></div>'
);
}
// finalni output koji se stavlja na stranicu
quizContainer.innerHTML = output.join('');
}
function showResults(teksts, quizContainer, rezContainer){
// prikupljanje odgovora iz celog kviza
var answerContainers = quizContainer.querySelectorAll('.odgovori');
// sacuvati odgovore korisnika..
var userAnswer = '';
var numCorrect = 0;
// za svako pitanje...
for(var i=0; i<teksts.length; i++){
// pronalazenje svakog odgovora
userAnswer = (answerContainers[i].querySelector('input[name=tekst'+i+']:checked')||{}).value;
// ako je odgovor tacan
if(userAnswer===teksts[i].indeks_korektnog_odgovora){
// dodati na sumarnu listu i sabrati koliko je tacnih...
numCorrect++;
// tacni odg zeleni
answerContainers[i].style.color = 'green';
}
// ako je odgovor netacan ili prazan
else{
// boja je, logicno, crvena...
answerContainers[i].style.color = 'red';
}
}
// prikaz ukupnog broja tacnih odgovora od sumarnog broja pitanja
rezContainer.innerHTML = numCorrect + ' pogođenih od ukupno ' + teksts.length;
}
// prikaz odgovora
prikazPitanja(teksts, quizContainer);
// kad se klikne "posalji" dugme prikaz rezultata
posaljiDugme.onclick = function(){
showResults(teksts, quizContainer, rezContainer);
}
}
var quizContainer = document.getElementById('quiz');
var rezContainer = document.getElementById('results');
var posaljiDugme = document.getElementById('submit');
And html:
<title>Page title</title>
<link rel="stylesheet" href="index.css">
<div id="quiz"></div>
<button id="submit">Pošalji odgovore</button> <button id="reloadfazon" onClick="window.location.reload()">Nova pitanja / reload</button>
<div id="results"></div>
<script src="script.js"></script>
<script>
generisiKviz(mojaPitanja, quizContainer, rezContainer, posaljiDugme);
</script>
And html:
<title>Quiz project</title>
<link rel="stylesheet" href="index.css">
<div id="quiz"></div>
<button id="submit">Pošalji odgovore</button> <button id="reloadfazon" onClick="window.location.reload()">Nova pitanja / reload</button>
<div id="results"></div>
<script src="script.js"></script>
<script>
generisiKviz(mojaPitanja, quizContainer, rezContainer, posaljiDugme);
</script>
I'm trying to use Math.floor(Math.random() but I'm lost. Any suggestions about the best approach here please? :)
Thanks!