Dein Ansatz war nicht schlecht. Du hast nur ein paar kleine Fehler gemacht.
Zwei davon hast du schon selbst erkannst:
Wie kann ich die Funktion zum Mischen gleich beim Laden der Seite starten? Soll ich dafür <body onLoad="..."> benutzen? Wenn ja, wie binde ich das in meinem Code ein?
Stimmt diese Anweisung, oder muss fr_arr ein Array in meinem Fall sein?
Du kannst natürlich erst auf die Objekte zugreifen, wenn sie auch im DOM vorhanden sind. window.on
load ist da ein Weg - oder ein anderer ist, einfach das <script> direkt an das Ende des <body>s zu legen.
Und fr_arr muss ein Array sein, da du in einer HTMLCollection (was du von
document.getElementsByClassName() bekommst) nicht die Reihenfolge verändern kannst.
Als drittes kannst du die Funktion so nicht direkt übernehmen, da weitere Teile das random-Modules innerhalb verwendet werden (random.integer.inRange()).
Insgesamt könnte das dann so aussehen:
HTML:
<!DOCTYPE html>
<html>
<head><title>Quiz</title>
</head><body>
<div class="frage">
Frage 1:<br>
<div class="antwort"><input type="checkbox" name="falsch"> Falsche Antwort<br/></div>
<div class="antwort"><input type="checkbox" name="falsch"> Falsche Antwort<br></div>
<div class="antwort"><input type="checkbox" name="richtig"> Richtige Antwort<br></div>
<div class="antwort"> <input type="checkbox" name="richtig"> Richtige Antwort<br></div>
<br>
</div>
<div class="frage">
Frage 2:<br>
<div class="antwort"><input type="checkbox" name="falsch"> Falsche Antwort<br></div>
<div class="antwort"><input type="checkbox" name="richtig"> Richtige Antwort<br></div>
<div class="antwort"><input type="checkbox" name="falsch"> Falsche Antwort<br></div>
<div class="antwort"><input type="checkbox" name="richtig"> Richtige Antwort<br></div>
<br>
</div>
<div class="frage">
Frage 3:<br>
<div class="antwort"><input type="checkbox" name="richtig"> Richtige Antwort<br></div>
<div class="antwort"><input type="checkbox" name="richtig"> Richtige Antwort<br></div>
<div class="antwort"><input type="checkbox" name="falsch"> Falsche Antwort<br></div>
<div class="antwort"><input type="checkbox" name="falsch"> Falsche Antwort<br></div>
<br>
</div>
<div class="frage">
Frage 4:<br>
<div class="antwort"><input type="checkbox" name="richtig"> Richtige Antwort<br></div>
<div class="antwort"><input type="checkbox" name="richtig"> Richtige Antwort<br></div>
<div class="antwort"><input type="checkbox" name="falsch"> Falsche Antwort<br></div>
<div class="antwort"><input type="checkbox" name="falsch"> Falsche Antwort<br></div>
<br>
</div>
<div class="frage">
Frage 5:<br>
<div class="antwort"><input type="checkbox" name="richtig"> Richtige Antwort<br></div>
<div class="antwort"><input type="checkbox" name="richtig"> Richtige Antwort<br></div>
<div class="antwort"><input type="checkbox" name="falsch"> Falsche Antwort<br></div>
<div class="antwort"><input type="checkbox" name="falsch"> Falsche Antwort<br></div>
<br>
</div>
<input type="button" value="Auswerten!" onclick="auswerten(this)">
<div id="ausgabe"> </div>
<script>
function mixArray(fr_arr){
for (var i = fr_arr.length; i--;){
var sIndex = Math.floor(Math.random() * (i + 1));
var h = fr_arr[i];
fr_arr[i] = fr_arr[sIndex];
fr_arr[sIndex] = h;
}
return fr_arr;
}
var fr_arr = [].slice.call(document.getElementsByClassName('frage'));
mixArray(fr_arr);
for(var i = 0; i < 2; i++){
fr_arr[i].style.display = "none";
}
function auswerten(button){
button.disabled = true;
var punkte = 0;
for (i=0; obj = document.getElementsByName('richtig')[i]; i++){
if (obj.checked) punkte++;
}
for (i=0; obj = document.getElementsByName('falsch')[i]; i++){
if (obj.checked) punkte--;
}
document.getElementById('ausgabe').firstChild.data =
'Du hast '+ punkte +' von '+ (pmax = document.getElementsByName('richtig').length) +
' möglichen Punkten erreicht. Das sind '+ Math.round(punkte*100/pmax) +' Prozent.';
}
</script>
</body>
</html>
- - - Aktualisiert - - -
PS: hab' das <form> mal entfernt...
- - - Aktualisiert - - -
PPS: Die Punktezählung musst du dann natürlich anders machen...