Создание викторины — у меня есть вопрос о моей функциональности цикла for

#javascript #jquery

#javascript #jquery

Вопрос:

(Я очень новичок в программировании, извините). Я создаю викторину по мелочам для моего учебного лагеря по программированию, используя jQuery и Javascript. До сих пор я получал материал для скрытия и отображения. Теперь препятствие, с которым я сталкиваюсь, — это когда я пытаюсь запустить викторину по мелочам.

(Я также приложу свой HTML для справки).

У меня возникли проблемы со следующим: 1. получение правильного отображения моего вопроса (я обнаружил, что могу отобразить его только в том случае, если я напишу $(«#question»).html(triviarray[0].question); 2. получение ответов, которые я создал в своем triviarray, для отображения на отдельных кнопках. 3. Мне нужно создать цикл for, но я не слишком уверен, правильно ли я его пишу или нет. Мне просто нужен цикл for для перебора каждого из созданных мной вопросов (с соответствующими ответами).

Если я напишу $(«#question»).html(triviarray.question); вопрос не будет напечатан на экране.

Когда я попытался выполнить document.getElementById(«answer»).innerHTML = «» triviarray.answers «»; он отображается как неопределенный. Я забыл, что у меня было изначально, но оно указано как «объект object»

Вот мой текущий JS-скрипт:

 // ================================= GLOBAL VARIABLES ==========================================

var triviaArray = [
    {
        question: "How many times is 'f*ck' used in Pulp Fiction?",
        answers: ["a. 252 times", "b. 265 times", "c. 287 times", "d. 301 times"],
        correctAnswer: "b"
    },
    {
        question: "How many days did Bruce Willis work on the film?",
        answers: ["a. 28 days", "b. 42 days", "c. 14 days", "d. 18 days"],
        correctAnswer: "d"
    },
    {
        question: "This movie cost $8 million to make. How much of that money went to pay the actors' salaries?",
        answers: ["a. $6 million", "b. $4 million", "c. $5 million", "d. $8 million"],
        correctAnswer: "c"
    },
    {
        question: "When John Travolta was reviving Uma Thurman's character, which two board games are seen in the background?",
        answers: ["a. Game of Life, Operation", "b. Monopoly, Game of Life", "c. Candyland, Operation", "d. Scrabble, Operation"],
        correctAnswer: "a"
    },
];

var count = 0;

// user's guess is either right or wrong
var rightGuesses = 0;
var wrongGuesses = 0;
var unanswered = 0;

// define variable for the timer
var timer = 0;

// timer functionality 
var intervalID;

// // INVESTIGATE: should I have an index of questions and answers? If so,
// var indexQandA = 0; 

// then the game should start w/ 0.
// var score = 0; 

// create a results page at the end instead ("<h3>this is how many you've guessed correctly "   correct   "! </h3>")
// jQuery manipulates HTML!

// ========================================= PROCESS ==========================================

// GOOD HOUSEKEEPING: Make sure that HTML div tags are created and represented.
// Try to figure out where I can console.log stuff.

$(document).ready(function () {

    // List out everything that needs to be hidden before starting the quiz.
    $("#question").hide();
    $(".choices").hide();
    $("#answer").hide();
    $("#timer").hide();

    //  When I click the button. it should start the trivia quiz.
    $("#btn4").on("click", startQuiz);

    // create a function startQuiz() to start the game. 
    function startQuiz() {

        // the following represents the Results page... meaning I have to create a results page. 
        $("#startQuiz").empty();
        $("#right").empty();
        $("#wrong").empty();
        $("unanswered").empty();

        rightGuesses = 0;
        wrongGuesses = 0;
        unanswered = 0;

        // whatever I hid, now I have to show it: 
        $("#question").show();
        $(".choices").show();
        $("#answer").show();
        $("#timer").show();

        // The timer should start running.
        // If the timer starts running, the button should disappear and the question should display.
        // timer();
    };

    // function timer() {
    //     timer = setInterval(countdown, 10000 * 3)
    // };

    // create a function nextQuestion() and have a for loop to generate the next question.
    function nextQuestion() {

        $("#question").html(triviaArray[0].question);
        for (var i = 0; i < triviaArray.length; i  ) {
            document.getElementById("answer").innerHTML  = "<button>"   triviaArray.answers   "</button>";
        };

    };

nextQuestion();
});
  

и вот мой текущий HTML (для справки, на случай, если моя ошибка связана с соглашениями об именовании): (amp; не волнуйтесь, у меня есть соответствующие ссылки на CSS, jQuery, Javascript)

 
    <div class="container"> 
        <div id="quiz">
            <h1>Pulp Fiction Trivia Quiz</h1>
            <hr style="margin-top: 20px"> 

            <div id="startQuiz">
                <button id="btn4">START QUIZ</button>
            </div>

            <!-- Question / Answer section -->
            <div id="timer">
                <h3>Time Remaining:</h3>
            </div>
            <div id="question"></div>
            <div id="answer"></div>

            <!-- Display correct answer -->
            <div id="message"></div>
            <div id="correctedAnswer"></div>

            <!-- Track Stats -->
            <div id="right"></div>
            <div id="wrong"></div>
            <div id="unanswered"></div>

            <div class="choices">
                <!-- <button id="btn0"><span id="choice0"></span></button>
                <button id="btn1"><span id="choice1"></span></button>
                <button id="btn2"><span id="choice2"></span></button>
                <button id="btn3"><span id="choice3"></span></button> -->
            </div>

            <hr style="margin-top: 50px">
            <footer>
                <p id="progress">Question x of y.</p>
            </footer>
        </div>
  

Ответ №1:

Вы зацикливаетесь на массиве, который содержит все ваши данные, но вы должны делать это с массивом ответов на вопрос. Итак, ваш код должен выглядеть так для первого вопроса

     function nextQuestion() {

        $("#question").html(triviaArray[0].question);
        for (var i = 0; i < triviaArray[0].answers.length; i  ) {
            document.getElementById("answer").innerHTML  = "<button>"   triviaArray[0].answers[i]   "</button>";
        };

    };
  

Это будет работать только для первого вопроса. Глядя на ваши комментарии, вы на правильном пути. Может быть, вам следует поискать лучший способ зацикливания, например forEach .