2016-11-21 1 views
2

Funktionalität:erleben „Uncaught Auslöser Range: Maximale Call-Stack-Größe überschritten“

Am versuchen, ein Quiz mit 5 versucht zu erstellen, wobei jede Frage Seite eine randomisierte Frage aus jeder Kategorie angezeigt ist.

Wenn also ein Benutzer jede Frage richtig beantwortet, wird die nächste Frage ausgeblendet und wenn der Benutzer 3 Fragen innerhalb von 3 von 5 Versuchen richtig beantwortet hat, werden diese zur gameWin Seite navigiert. Sonst, wenn Benutzer alle 5 Versuche ausgeschöpft haben, wird es die Benutzer zu einer GameOver Seite navigieren.

Ausgabe:

Zu diesem Zeitpunkt, nach dem Benutzer alle fünf Versuche ausgeschöpft haben, wird der folgende Fehler msg in meinem console.log as => Uncaught Auslöser Range angezeigt: Maximale Call-Stack-Größe überschritten .

Ich möchte um Hilfe bitten, wie das folgende Problem auf der Call-Stack-Größe behoben zu beheben.

Code:

function showQuestion() { 
 

 
    //Question list shown is more than 5, show game over 
 
    if (GamePage_question_list.length > 5) { 
 
    GameOver(); 
 
    } else { 
 

 
    //Randomise Each Category Questions 
 

 
    //Randomise Category_A Question 
 
    random_Question_CategoryA = Math.floor(Math.random() * CategoryA_Questions.length); 
 

 
    //Randomise Category_B Question 
 
    random_Question_CategoryB = Math.floor(Math.random() * CategoryB_Questions.length); 
 

 
    //Randomise Category_C Question 
 
    random_Question_CategoryC = Math.floor(Math.random() * CategoryC_Questions.length); 
 

 
    //Randomise Category_D Question 
 
    random_Question_CategoryD = Math.floor(Math.random() * CategoryD_Questions.length); 
 

 
    //Display random question 
 
    random_Question = Math.floor(Math.random() * GameQuestion.length); 
 

 
    var exist = false; 
 

 
    for (i = 0; i < GamePage_question_list.length; i++) { 
 
     if (GamePage_question_list[i] == (random_Question_CategoryA + "")) { 
 
     exist = true; 
 
     } else if (GamePage_question_list[i] == (random_Question_CategoryB + "")) { 
 
     exist = true; 
 
     } else if (GamePage_question_list[i] == (random_Question_CategoryC + "")) { 
 
     exist = true; 
 
     } else if (GamePage_question_list[i] == (random_Question_CategoryD + "")) { 
 
     exist = true; 
 
     } else if (GamePage_question_list[i] == (random_Question + "")) { 
 
     exist = true; 
 
     } 
 
    } 
 

 
    Game_wait = false; 
 

 
    if (exist == false) { 
 

 
     //Display Question from each category after each question has been answered 
 
     if (GamePage_question_list.length == 0) { 
 

 
     console.log("Questions:" + CategoryA_Questions[random_Question_CategoryA]); 
 

 

 
     GamePage_question_list.push(random_Question_CategoryA + ""); 
 

 
     $("#GamePage_question").html(CategoryA_Questions[random_Question_CategoryA]); 
 

 
     answerList = CategoryA_Answers[random_Question_CategoryA]; 
 

 
     $("#GamePageAnswer_1").attr("src", answerList[0]); 
 

 
     $("#GamePageAnswer_2").attr("src", answerList[1]); 
 

 
     console.log("Answers:" + answerList); 
 

 
     } else if (GamePage_question_list.length == 1) { 
 

 
     GamePage_question_list.push(random_Question_CategoryB + ""); 
 

 
     $("#GamePage_question").html(CategoryB_Questions[random_Question_CategoryB]); 
 

 
     answerList = CategoryB_Answers[random_Question_CategoryB]; 
 

 
     $("#GamePageAnswer_1").attr("src", answerList[0]); 
 

 
     $("#GamePageAnswer_2").attr("src", answerList[1]); 
 

 
     } else if (GamePage_question_list.length == 2) { 
 

 
     GamePage_question_list.push(random_Question_CategoryC + ""); 
 

 
     $("#GamePage_question").html(CategoryC_Questions[random_Question_CategoryC]); 
 

 
     answerList = CategoryC_Answers[random_Question_CategoryC]; 
 

 
     $("#GamePageAnswer_1").attr("src", answerList[0]); 
 

 
     $("#GamePageAnswer_2").attr("src", answerList[1]); 
 

 
     } else if (GamePage_question_list.length == 3) { 
 

 
     GamePage_question_list.push(random_Question_CategoryD + ""); 
 

 
     $("#GamePage_question").html(CategoryD_Questions[random_Question_CategoryD]); 
 

 
     answerList = CategoryD_Answers[random_Question_CategoryD]; 
 

 
     $("#GamePageAnswer_1").attr("src", answerList[0]); 
 

 
     $("#GamePageAnswer_2").attr("src", answerList[1]); 
 

 
     } else if (GamePage_question_list.length == 4) { 
 

 
     GamePage_question_list.push(random_Question + ""); 
 

 
     $("#GamePage_question").html(GameQuestion[random_Question]); 
 

 
     answerList = GameAnswer[random_Question]; 
 

 
     $("#GamePageAnswer_1").attr("src", answerList[0]); 
 

 
     $("#GamePageAnswer_2").attr("src", answerList[1]); 
 
     } 
 
    } else { 
 
     showQuestion(); 
 
    } 
 
    } 
 
} 
 

 

 
function select_answer(flag) { 
 

 
    if (Game_wait == false) { 
 
    Game_wait = true; 
 

 
    var currentQuestionIndex = GamePage_question_list[GamePage_question_list.length - 1]; 
 

 
    var CategoryA_correctAnswer = CategoryA_CorrectAnswers[parseInt(currentQuestionIndex)]; 
 
    var CategoryA_POPUP_Answer = CategoryA_PopUpAnswers[parseInt(currentQuestionIndex)]; 
 

 

 
    var CategoryB_correctAnswer = CategoryB_CorrectAnswers[parseInt(currentQuestionIndex)]; 
 
    var CategoryB_POPUP_Answer = CategoryB_PopUpAnswers[parseInt(currentQuestionIndex)]; 
 

 
    var CategoryC_correctAnswer = CategoryC_CorrectAnswers[parseInt(currentQuestionIndex)]; 
 
    var CategoryC_POPUP_Answer = CategoryC_PopUpAnswers[parseInt(currentQuestionIndex)]; 
 

 
    var CategoryD_correctAnswer = CategoryD_CorrectAnswers[parseInt(currentQuestionIndex)]; 
 
    var CategoryD_POPUP_Answer = CategoryD_PopUpAnswers[parseInt(currentQuestionIndex)]; 
 

 
    var correctAnswer = GameCorrectAnswer[parseInt(currentQuestionIndex)]; 
 
    var POPUP_Answer = GamePopUpAnswer[parseInt(currentQuestionIndex)]; 
 

 
    console.log("flag_answer chosen:" + flag); 
 

 

 
    //Show the POPUP Correct answer 
 
    //THIS IS THE PART WHERE THE CORRECT ANSWER WILL SHOW IF THE USER ANSWERS EACH QUESTION WRONGLY 
 

 
    if (GamePage_question_list.length == 1) { 
 

 
     console.log("CategoryA_correctAnswer" + CategoryA_correctAnswer); 
 
     console.log("A"); 
 

 
    } else if (GamePage_question_list.length == 2) { 
 

 
     console.log("CategoryB_correctAnswer" + CategoryB_correctAnswer); 
 
     console.log("B"); 
 

 
    } else if (GamePage_question_list.length == 3) { 
 

 
     console.log("CategoryC_correctAnswer" + CategoryC_correctAnswer); 
 
     console.log("C"); 
 

 
    } else if (GamePage_question_list.length == 4) { 
 

 
     console.log("CategoryD_correctAnswer" + CategoryD_correctAnswer); 
 
     console.log("D"); 
 

 
    } else if (GamePage_question_list.length == 5) { 
 

 
     console.log("GameCorrectAnswer" + GameCorrectAnswer); 
 
     console.log("E"); 
 
    } 
 

 

 
    } 
 
} 
 

 

 
function GameOver() { 
 
    idleTime = 0; 
 

 
    console.log("GameOver"); 
 

 
    setTimeout(function() { 
 
    location.reload(); 
 
    }, 5000); 
 
}
<!-- Original Question --> 
 
<div id="GamePage_question" style="position:absolute; z-index:99; top:460px; left:160px; margin:auto; color:#FFFFFF; font-size:60px; font-family: Calibrib; width:800px; text-align: center;"></div> 
 

 
<!-- Answer-Original-Choice List --> 
 
<img id="GamePageAnswer_1" style="position:absolute; z-index:3; top:1100px; left:260px; margin:auto;" /> 
 
<img id="GamePageAnswer_2" style="position:absolute; z-index:3; top:1300px; left:260px;" /> 
 

 
<!-- Selection answer --> 
 
<img src="lib/image/transparent.png" class="transparentBg" style="position:absolute; z-index:4; top:1100px; left:0px; margin:auto; width:1080px; height:150px; border:1;" onclick="select_answer(1);" /> 
 
<img src="lib/image/transparent.png" class="transparentBg" style="position:absolute; z-index:4; top:1300px; left:0px; margin:auto; border:1; width:1080px; height:150px;" onclick="select_answer(2);" />

+1

Seine zurück sehr verwirrend, um den vollständigen Code zu betrachten. Hier ist, was Sie tun können .. Haben Sie einfach den Code, der ausgeführt wird, wenn der Benutzer die ganze Zeit falsch antwortet. Auf diese Weise ist der Code minimal und wir können besser helfen. Auch FYI dieser Fehler tritt auf, wenn es immer Endlosschleifen im Code gibt .. –

+0

@Reddy, ich habe versucht, so viel wie möglich zu minimieren – Luke

+0

danke, lassen Sie mich überprüfen –

Antwort

3

ich im Grunde denke, dass die else-Klausel hier>if (exist == false) einen gleichen unendlichen Aufruf showQuestion verursacht (wie durch @JonasGrumann kommentiert), während exist ist ein Wert außer false (wie von @Reddy kommentiert, verursacht eine Anrufschleife dieses RangeError). GamePage_question_list erreicht nie die sechste Länge wie von @ FK82 kommentiert, so wird die if Klausel von if (GamePage_question_list.length > 5) nie ausgeführt, aber die Else-Klausel, wo showQuestion für immer wieder bei der Else-Klausel von if (exist == false) aufgerufen wird (ich denke, 5 Länge sollte hier programmatischer sein: 4).

würde Die basische Lösung dieses GamePage_question_list.length > 5 Zustand zu aktualisieren, wo größer als Operator >= oder 5 könnte 4 sein könnte, zu überprüfen, ob die Länge Getter ein Wert größer/als oder gleich/bis 5.

Verwandte Themen