Ich versuche, einen Klick durch Persönlichkeit Quiz mit reinem Javascript für eine Uni-Zuordnung zu erstellen. Ich habe eine Reihe von Divs angelegt, damit sie erscheinen können. Jede Frage hat eine Liste von 4 (oder so) Antworten, die sich auf einen anderen Persönlichkeitstyp beziehen. Ich beabsichtige, eine Reihe von Objekten zu behalten, um jede ausgewählte Antwort zu vergleichen und am Ende eine Aufschlüsselung der Persönlichkeitstypen bereitzustellen.Javascript Persönlichkeit Quiz Problem mit 'this' und Daten * Attribute
Ich bin derzeit fest auf die Funktion zu;
- Datensatz die ausgewählten Daten und fügen Sie sie in das Array Antworten,
- verstecken die aktuelle Frage div und
- Display die nächste Frage div
HTML:
<div class="question" id="q1" data-next="q2">
<h2>Question 1:</h2>
<p>Which of the following is your favourite movie? </p>
<ol class="button">
<li data-score="Ninja">Karate Kid</li>
<li data-score="Robot">Wall-E</li>
<li data-score="Pirate">Pirates of the Caribbean</li>
<li data-score="Zombie">Dawn of the Dead</li>
</ol>
</div>
<div class="question" id="q2" data-next="q3">
<h2>Question 2:</h2>
<p>A building is on fire and you hear a child's screaming for help from the third floor window. Do you: </p>
<ol class="button">
<li data-score="Ninja">Mysteriously disappear and re-appear with the children</li>
<li data-score="Robot">Run in and save the child on the second floor, because i'm made of metal and fire won't hurt me!</li>
<li data-score="Pirate">Dress up as a pirate and loot the surrounding neighbourhood, including the bank?</li>
<li data-score="Zombie">Eat all the brains. Nom nom uuuuggghhh.</li>
</ol>
</div>
JS:
// Create a listener for clicks on the 'start the quiz' button on the front page.
document.getElementById("beginquiz").addEventListener("click", startQuiz);
// When the button is clicked the 'intro' div is hidden and the first question div is displayed
function startQuiz() {
document.getElementById("intro").style.display = "none";
document.getElementById("q1").style.display = "block";
}
// Create an array object to store all the quiz answers. Each selected answer should increase the category score by 1. The highest score will be the personality 'type' in the results.
var answerData = [
{name: "Ninja" , score: 0},
{name: "Robot" , score: 0},
{name: "Pirate" , score: 0},
{name: "Zombie" , score: 0} ]
// Get all of the .buttons elements
var buttons = document.querySelectorAll(".button");
// Add an onclick event listener to every element with a class of .buttons
for (var i = 0 ; i < buttons.length ; i++) {
// When an element with .buttons is clicked, run the function called buttonClicked
buttons[i].onclick = buttonClicked;
}
// Define what buttonClicked does
function buttonClicked() {
// Get the current element's data-score value
var selectedType = this.dataset.score;
// Increase the selected answer's 'type' by 1
answerData["selectedType"].score++;
// Hide the current question div
this.parentElement.style.display = "none";
// Work out what the next question div is
var nextQuestion = this.parentElement.dataset.next;
// Display the next question element
document.getElementById(nextQuestion).style.display = "block";
}
Fiddle mit dem, was ich bisher https://jsfiddle.net/funkefiddle/e1za0gtr/1/
Aus irgendeinem Grunde getan habe habe ich beschlossen, dass die Daten-Score ein guter Ort war, eine Verbindung zwischen dem klickbaren Antwort Elemente zu machen und tatsächlich eine Spur davon zu halten. Natürlich funktioniert mein Code nicht wirklich. Die Firefox-Konsole zeigt "this.dataset.score is undefined".
var selectedType = this.dataset.score.value;
answerData["selectedType"].score++;
Bitte halbieren.
Auch - ich habe keine Ahnung, ob der Code zum Anzeigen des nächsten Elements in der Serie noch funktioniert, da meine Fehlerüberprüfung es noch nicht so weit gebracht hat. Ich habe nur geschrieben, was mein Gehirn vorgeschlagen hat, könnte funktionieren.
Edit: Ich habe die .value los, weil ich nicht weiß, warum ich es dort an erster Stelle hatte. Auch die letzte Zeile wurde geändert, um nextQuestion eine Variable anstelle einer Zeichenfolge zu machen. Die Fragen zeigen jetzt/verstecken sich in Progression (wenn ich die answerData Zeile aus kommentieren.
Ich denke, das bedeutet, dass ich auf der Linie bin stecken, dass ich den Array-Wert für die gewählte Antworttyp erhöhen möchten.
answerData[selectedType].score++ ;
Ich scherze Sie nicht, wie ich diese Antwort meine Spotify-Playlist begann zu spielen "Komm und hol deine Liebe" von den Guardians of the Galaxy genial Mix vol.1 Vielen Dank für die Antwort. Ich hatte vorher noch nie von Event-Zielen gehört. – Funkexchange
Gern geschehen. Lass mich wissen, welchen nächsten Song du hören möchtest: P – trincot