2016-05-29 6 views
0

Ich versuche, einen Multiple-Choice-Test für eine RPG-Website zu machen. Sie sind 14 Fragen, und jede hat 8 Antworten.Getting Code zum Durchlaufen mehrerer Eingänge für einen Test

Jede der 8 Antworten entspricht einem Objekt mit 8 Eigenschaften. Die Antworten (vorausgesetzt, dass ich den Code erhalten, jeden einzelnen Typ zu erkennen) wird +1 zu jeder Eigenschaft hinzufügen, am Ende des Tests wird ein Vergleich zwischen den Werten der Eigenschaften ausgeführt und das richtige Ergebnis ausgespuckt.

Aktuelles Problem:

Ich habe zusammen diesen Code pieced: (der vollständige Code unten sein wird)

// Go through all questions and add +1 for each checked 
// input with a value = "monk" 

$('#test').on('click', function() { 
$('input[name^= "answer"]:checked').each(function(){ 
     if ($('input[name = answer]:checked').val() == "monk"){ 
      secondaryResults.mnk++; 
     console.log(secondaryResults); 
     } 


    }) 

Nun werden die oben funktioniert perfekt und genau, wie ich es will arbeiten, geht es durch alle 14 Fragen, die die mit "Mönch" getaggten Antworten addieren, fügen sie der Eigenschaft des Objekts secondaryResults hinzu.

Allerdings, wenn Sie in ähnlichen Code hinzufügen, um das gleiche für Antworten tun mit "berserker" getaggt es endet Berserker Mönch hinzufügen, schiefe Ergebnisse geben.

Zum Beispiel:

Frage 1: Antwort = Mönch

Frage 2: Antwort = Mönch

Frage 3: Antwort = Berserker

Frage 4: Antwort = Dieb

mit diesem Code erwartete ich die Konsole.log ausspucken

Monk: 2

Berserker: 1

Thief: 1

statt es spuckt Mönch: 4

Ich habe versucht, die gleiche Funktion nur für eine andere Variable zu schaffen (unter Ihnen sehe den zweiten Versuch für den Wert/var berserker/ber) und verknüpfe es mit demselben Klickereignis. Ich habe auch versucht, es innerhalb der .each() - Funktion sowie innerhalb der ersten .on() -Funktion zu setzen. Ich erhalte die gleichen Ergebnisse jedes Mal

So Frage: Was würde ich in dem obigen Abschnitt des Codes enthalten müssen, um den Code zu machen:

  1. Weiter jedes einzelne Auftreten eines chec zählen, k für alle 8 Eigenschaften
  2. Speichern Sie die Benutzerpunktzahl innerhalb des Objekts (siehe unten) für die spätere Verwendung.

Derzeit tut dies der Code, aber nur für einen Eingangswert/Variable, die Monk ist, im Objekt auf mnk verkürzt.

Alle Script:

$(window).load(function() { 

$(".intro").appendTo('#display_box'); 
var question = $(".question"); 
var questionPosition = -1; 

var secondaryResults = { 
    def:0, 
    ber:0, 
    mnk:0, 
    rng:0, 
    cle:0, 
    thf:0, 
    mge:0, 
}; 

var primaryResults = { 
    def:0, 
    ber:0, 
    mnk:0, 
    rng:0, 
    cle:0, 
    thf:0, 
    mge:0, 
}; 



function clearBox(){ 
    $("#display_box").children().fadeOut(500).appendTo('#question_holding'); 
}; 



function cycle(){ 

    question.eq(questionPosition).fadeIn(500).appendTo("#display_box"); 
    $("#display_box").animate({scrollTop:0}, 500); 


} 





    $('#leftarrow').on('click', function(){ 
    questionPosition--; 
    if (questionPosition <= -1) {questionPosition = 13}; 
    clearBox(); 
    cycle(); 





}); 





$('#rightarrow').on('click', function(){ 
    questionPosition++; 
    if (questionPosition > 13) { questionPosition = 0}; 
    clearBox(); 
    cycle(); 

    if($('input[name^="answer"]:checked').length > 13) { 
     $("#submit").css('display', 'block'); 
    } 




}); 
$('#test').on('click', function() { 
$('input[name^= "answer"]:checked').each(function(){ 
     if ($('input[name = answer]:checked').val() == "monk"){ 
      secondaryResults.mnk++; 
     console.log(secondaryResults); 
     } 


    }) 



}); 

$('#test').on('click', function() { 
$('input[name^= "answer"]:checked').each(function(){ 
     if ($('input[name = answer]:checked').val() == "berserker"){ 
      secondaryResults.ber++; 
     console.log(secondaryResults); 
     } 


    }) 


}); 

}); 
+0

könnte Sie einige html hinzufügen? –

Antwort

0

Sie wahrscheinlich brauchen nur innerhalb Ihrer jeder Schleife das aktuelle Element zu verweisen.

$('input[name^= "answer"]:checked').each(function(){ 
     if ($('input[name = answer]:checked').val() == "monk"){ 
      secondaryResults.mnk++; 
     console.log(secondaryResults); 
     } 
    }) 

zu ändern etwas wie:

$('input[name^= "answer"]:checked').each(function(){ 
     if ($(this).val() == "monk"){ 
      secondaryResults.mnk++; 
     console.log(secondaryResults); 
     } 
    }) 

http://www.w3schools.com/jquery/misc_each.asp

Verwandte Themen