• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z Quizem nie wyświetla pytań.

Object Storage Arubacloud
0 głosów
259 wizyt
pytanie zadane 26 grudnia 2022 w JavaScript przez AtomBari Początkujący (440 p.)

Witam, mam mały problem z quizem taki iż nie wyświetla mi pytań ani odpowiedzi. Uczę się javyscript od paru tygodni więc nie wszystko wiem umiem niestety :(

HTML:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <link rel="stylesheet" href="./styles/style.css">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">

    <script src="./classes/questions.js" defer></script>
    <script src="./classes/app.js" defer></script>
    <script src="./classes/answer.js" defer></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js" integrity="sha384-w76AqPfDkMBDXo30jS1Sgez6pr3x5MlQ1ZAGC+nuZB+EYdgRZgiwxhTBTkF7CXvN" crossorigin="anonymous" defer></script>


</head>
<body class="bg-dark">

    <div class="container text-center bg-dark text-warning">
    <div class="quiz-container mx-auto" id="quiz">
        <div class="quiz-header">
            <h2 id="question">Question Text</h2>
            <ul>
                <li>
                    <input type="radio" name="answer" id="a" class="answer" >
                    <label for="a" id="a_text">Answer</label>
                </li>
                <li>
                    <input type="radio" name="answer" id="b" class="answer" >
                    <label for="b" id="b_text">Answer</label>
                </li>
                <li>
                    <input type="radio" name="answer" id="c" class="answer" >
                    <label for="c" id="c_text">Answer</label>
                </li>
                <li>
                    <input type="radio" name="answer" id="d" class="answer" >
                    <label for="d" id="d_text">Answer</label>
                </li>
            </ul>
        </div>

    <button type="button" class="btn btn-warning" id="submit">Submit</button>
    
    </div>
 </div>
    
</body>
</html>

 

CSS:

body{
    font-family:  sans-serif;
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100vh;
    overflow: hidden;
    margin: 0;
}

.quiz-header{
    padding: 4rem;
}

h2{
    padding: 1rem;
    text-align: center;
    margin: 0;
}
ul{
    list-style: none;
    padding: 0;
}
ul li {
    font-size: 1.2rem;
    margin: 1rem 0;
}

ul li lable{
    cursor: pointer;
}

button{
    width: 180px;
    height: 50px;
}

.quiz-container{
    background-color: rgb(0, 0, 0);
    border-radius: 10px;
    box-shadow: 0 0 10px 2px rgba(100, 100, 100, 0.1);
    width: 600px;
    overflow: hidden;
    

}

answer.js: 

body{
    font-family:  sans-serif;
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100vh;
    overflow: hidden;
    margin: 0;
}

.quiz-header{
    padding: 4rem;
}

h2{
    padding: 1rem;
    text-align: center;
    margin: 0;
}
ul{
    list-style: none;
    padding: 0;
}
ul li {
    font-size: 1.2rem;
    margin: 1rem 0;
}

ul li lable{
    cursor: pointer;
}

button{
    width: 180px;
    height: 50px;
}

.quiz-container{
    background-color: rgb(0, 0, 0);
    border-radius: 10px;
    box-shadow: 0 0 10px 2px rgba(100, 100, 100, 0.1);
    width: 600px;
    overflow: hidden;
    

}

app.js:

const quizData = [
    new Question(
      'Which one is not an object oriented programming langauge?',
      'C',
      new Answer('Java', 'C#', 'C++', 'C')
    ),
    new Question(
      'Which language is used for styling web pages?',
      'CSS',
      new Answer('HTML', 'JQuery', 'CSS', 'XML')
    ),
    new Question(
      'There are ___ main components of object oriented programming.?',
      '4',
      new Answer('1', '6', '2', '4')
    ),
    new Question(
      'Which langauge is used for web apps?',
      'All',
      new Answer('PHP', 'Python', 'JavaScript', 'All')
    ),
  ];

const quiz = document.getElementById('quiz');
const answerEls = document.querySelectorAll('.answer');
const questionEl = document.getElementById('question');
const a_text = document.getElementById('a_text');
const b_text = document.getElementById('b_text');
const c_text = document.getElementById('c_text');
const d_text = document.getElementById('d_text');
const submitBtn = document.getElementById('submit');

let currentQuiz = 0
let score = 0;



const loadQuiz =()=>{
    deselectAnswers();

    let currentQuizData = quizData[currentQuiz];
    let answers = currentQuizData.answers;
  
    questionEl.innerText = currentQuizData.question;
    a_text.innerText = answers.a;
    b_text.innerText = answers.b;
    c_text.innerText = answers.c;
    d_text.innerText = answers.d;

};

const deselectAnswers=()=>{
    answerEls.forEach(answerEl=>answerEl.checked = false)
};

loadQuiz();

const getSelected=()=> {
    let answer
    answerEls.forEach(answerEl => {
        if(answerEl.checked) {
            answer = answerEl.id
        }
    })
    return answer
}
submitBtn.addEventListener('click', () => {
    const answer = getSelected();
    if(answer) {
      if(answer === quizData[currentQuiz].correctAnswer) {
        score++;
      }
      currentQuiz++;
      if(currentQuiz < quizData.length) {
        loadQuiz();
      } else {
        quiz.innerHTML = `
        <h2>You answered ${score}/${quizData.length} questions correctly</h2>
        <button onclick="location.reload()">Reload</button>
        `;
      }
    }
  });

question.js:

class Question {
    constructor(question, correctAnswer, answers) {
        this.question = question;
        this.correctAnswer = correctAnswer;
        this.answers = answers;
    }
    static saveQuizes() {
        let quizes = this.#getQuizes();
        localStorage.clear();
        localStorage.setItem("Quizes", JSON.stringify(quizes));
    }

    static loadQuizes() {
        let quizes = JSON.parse(localStorage.getItem("Quizes"));
        return quizes;
    }
}

 

komentarz 26 grudnia 2022 przez VBService Ekspert (253,400 p.)
edycja 26 grudnia 2022 przez VBService

Uporządkujmy Twój kod  wink

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <link rel="stylesheet" href="./styles/style.css">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">

    <script src="./classes/questions.js" defer></script>
    <script src="./classes/app.js" defer></script>
    <script src="./classes/answer.js" defer></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js" integrity="sha384-w76AqPfDkMBDXo30jS1Sgez6pr3x5MlQ1ZAGC+nuZB+EYdgRZgiwxhTBTkF7CXvN" crossorigin="anonymous" defer></script>


  </head>
  <body class="bg-dark">

    <div class="container text-center bg-dark text-warning">
      <div class="quiz-container mx-auto" id="quiz">
        <div class="quiz-header">
          <h2 id="question">Question Text</h2>
          <ul>
            <li>
              <input type="radio" name="answer" id="a" class="answer" >
              <label for="a" id="a_text">Answer</label>
            </li>
            <li>
              <input type="radio" name="answer" id="b" class="answer" >
              <label for="b" id="b_text">Answer</label>
            </li>
            <li>
              <input type="radio" name="answer" id="c" class="answer" >
              <label for="c" id="c_text">Answer</label>
            </li>
            <li>
              <input type="radio" name="answer" id="d" class="answer" >
              <label for="d" id="d_text">Answer</label>
            </li>
          </ul>
        </div>

        <button type="button" class="btn btn-warning" id="submit">Submit</button>

      </div>
    </div>

  </body>
</html>
body{
    font-family:  sans-serif;
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100vh;
    overflow: hidden;
    margin: 0;
}
 
.quiz-header{
    padding: 4rem;
}
 
h2{
    padding: 1rem;
    text-align: center;
    margin: 0;
}
ul{
    list-style: none;
    padding: 0;
}
ul li {
    font-size: 1.2rem;
    margin: 1rem 0;
}
 
ul li lable{
    cursor: pointer;
}
 
button{
    width: 180px;
    height: 50px;
}
 
.quiz-container{
    background-color: rgb(0, 0, 0);
    border-radius: 10px;
    box-shadow: 0 0 10px 2px rgba(100, 100, 100, 0.1);
    width: 600px;
    overflow: hidden; 
}

answer.js (nie podajesz, zgduje jego kod np.):

class Answer {
  constructor(a, b, c, d) {
    this.a = a;
    this.b = b;
    this.c = c;
    this.d = d;
  }
}

question.js

class Question {
  #getQuizes = [];

  constructor(question, correctAnswer, answers) {
    this.question = question;
    this.correctAnswer = correctAnswer;
    this.answers = answers;
  }
  static saveQuizes() {
    let quizes = this.#getQuizes();
    localStorage.clear();
    localStorage.setItem("Quizes", JSON.stringify(quizes));
  }

  static loadQuizes() {
    let quizes = JSON.parse(localStorage.getItem("Quizes"));
    return quizes;
  }
}

app.js

const quizData = [
  new Question(
    'Which one is not an object oriented programming langauge?',
    'C',
    new Answer('Java', 'C#', 'C++', 'C')
  ),
  new Question(
    'Which language is used for styling web pages?',
    'CSS',
    new Answer('HTML', 'JQuery', 'CSS', 'XML')
  ),
  new Question(
    'There are ___ main components of object oriented programming.?',
    '4',
    new Answer('1', '6', '2', '4')
  ),
  new Question(
    'Which langauge is used for web apps?',
    'All',
    new Answer('PHP', 'Python', 'JavaScript', 'All')
  ),
];

const quiz = document.getElementById('quiz');
const answerEls = document.querySelectorAll('.answer');
const questionEl = document.getElementById('question');
const a_text = document.getElementById('a_text');
const b_text = document.getElementById('b_text');
const c_text = document.getElementById('c_text');
const d_text = document.getElementById('d_text');
const submitBtn = document.getElementById('submit');

let currentQuiz = 0
let score = 0;



const loadQuiz =()=>{
  deselectAnswers();

  let currentQuizData = quizData[currentQuiz];
  let answers = currentQuizData.answers;

  questionEl.innerText = currentQuizData.question;
  a_text.innerText = answers.a;
  b_text.innerText = answers.b;
  c_text.innerText = answers.c;
  d_text.innerText = answers.d;

};

const deselectAnswers=()=>{
  answerEls.forEach(answerEl=>answerEl.checked = false)
};

loadQuiz();

const getSelected=()=> {
  let answer
  answerEls.forEach(answerEl => {
    if(answerEl.checked) {
      answer = answerEl.id
    }
  })
  return answer
}
submitBtn.addEventListener('click', () => {
  const answer = getSelected();
  if(answer) {
    if(answer === quizData[currentQuiz].correctAnswer) {
      score++;
    }
    currentQuiz++;
    if(currentQuiz < quizData.length) {
      loadQuiz();
    } else {
      quiz.innerHTML = `
        <h2>You answered ${score}/${quizData.length} questions correctly</h2>
        <button onclick="location.reload()">Reload</button>
        `;
    }
  }
});

 

komentarz 27 grudnia 2022 przez AtomBari Początkujący (440 p.)
class Answer {
    constructor(a,b,c,d){
        this.a = a;
        this.b = b;
        this.c = c;
        this.d = d;
    }
}

Tak dokładnie. żle wkleiłem kod.

3 odpowiedzi

0 głosów
odpowiedź 26 grudnia 2022 przez VBService Ekspert (253,400 p.)

... nie wyświetla pytań

w klasie Question brakuje takiego zapisu

[ on-line ]

class Question {
    #getQuizes = [];

    ...
}

 

0 głosów
odpowiedź 27 grudnia 2022 przez AtomBari Początkujący (440 p.)

 

Taki o to błąd wyskakuje chociaż ja tam nic nie widzę.

komentarz 27 grudnia 2022 przez VBService Ekspert (253,400 p.)

Spróbuj może zmienić kolejność linkowania skryptów

    <script src="./classes/questions.js" defer></script>
    <script src="./classes/app.js" defer></script>
    <script src="./classes/answer.js" defer></script>

na

    <script src="./classes/questions.js" defer></script>
    <script src="./classes/answer.js" defer></script>
    <script src="./classes/app.js" defer></script>    

 

albo star aplikacji umieść w zdarzeniu np. onload lub DOMContentLoaded.

komentarz 27 grudnia 2022 przez AtomBari Początkujący (440 p.)
Dziękuję bardzo ! pomogło !!! tylko nie do końca rozumiem dlaczego to ma aż takie znaczenie.
komentarz 27 grudnia 2022 przez AtomBari Początkujący (440 p.)

@VBService, zmieniłem kolejność skryptów i zadziałało ale faktycznie zapomniałem o dodaniu window.onload. Teraz kolejne pytanie jak sprawdzić czy wszystko zapisuje się w local storage i ewentualnie jak to zrobić ?

komentarz 27 grudnia 2022 przez VBService Ekspert (253,400 p.)

Poczytaj w jakiej kolejności są renderowane (np. link) składniki strony przez "silnik" przeglądarki.

komentarz 27 grudnia 2022 przez VBService Ekspert (253,400 p.)
edycja 27 grudnia 2022 przez VBService

@AtomBari, na stronie otwartej w przeglądarce: wink

0 głosów
odpowiedź 27 grudnia 2022 przez AtomBari Początkujący (440 p.)

Zmieniłem mój kod i teraz problem jest taki iż nawet jeśli odpowiadam dobrze to wynik końcowy jest 0. Jak to rozwiązać ?
index.html:
 

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
 
    
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
 

    <script src="./classes/questions.js" defer></script>
    <script src="./classes/answer.js" defer></script>
    <script src="./classes/app.js" defer></script>  

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js" integrity="sha384-w76AqPfDkMBDXo30jS1Sgez6pr3x5MlQ1ZAGC+nuZB+EYdgRZgiwxhTBTkF7CXvN" crossorigin="anonymous" defer></script>
 
    <link rel="stylesheet" href="./styles/style.css">

  </head>
  <body class="bg-dark">
 
    
    <div class="container text-center bg-dark text-warning">
      <div class="quiz-container mx-auto" id="quiz">
        <div class="quiz-header">
            
            <div class="quiz-select">
                <h3>Select Quiz:</h3>
                <button type="button" class="btn btn-warning" id="quiz1-btn">Quiz 1</button>
                <button type="button" class="btn btn-warning" id="quiz2-btn">Quiz 2</button>
              </div>
            </div>

          <h2 id="question">Question Text</h2>
          <ul>
            <li>
              <input type="radio" name="answer" id="a" class="answer" >
              <label for="a" id="a_text">Answer</label>
            </li>
            <li>
              <input type="radio" name="answer" id="b" class="answer" >
              <label for="b" id="b_text">Answer</label>
            </li>
            <li>
              <input type="radio" name="answer" id="c" class="answer" >
              <label for="c" id="c_text">Answer</label>
            </li>
            <li>
              <input type="radio" name="answer" id="d" class="answer" >
              <label for="d" id="d_text">Answer</label>
            </li>
          </ul>

          <button type="button" class="btn btn-warning" id="submit">Submit</button>
        
        </div>
      </div>
    </div>
 
  </body>
</html>

app.js:

window.onload =()=>{

  const quizData1 = [
    
    new Question(
      'Which one is not an object oriented programming langauge?',
      'C',
      new Answer('Java', 'C#', 'C++', 'C')
    ),
    new Question(
      'Which language is used for styling web pages?',
      'CSS',
      new Answer('HTML', 'JQuery', 'CSS', 'XML')
    ),
  
  ];
   
  const quizData2 = [

    new Question(
      'There are ___ main components of object oriented programming.?',
      '4',
      new Answer('1', '6', '2', '4')
    ),
    new Question(
      'Which langauge is used for web apps?',
      'All',
      new Answer('PHP', 'Python', 'JavaScript', 'All')
    ),
  ];

  localStorage.setItem('allQuizData', JSON.stringify({ quizData1, quizData2 }));

  // Retrieve quiz data from local storage
  const retrievedQuizData = JSON.parse(localStorage.getItem('allQuizData'));

   
  const quiz = document.querySelector('#quiz');
  const answerEls = document.querySelectorAll('.answer');
  const questionEl = document.querySelector('#question');
  const a_text = document.querySelector('#a_text');
  const b_text = document.querySelector('#b_text');
  const c_text = document.querySelector('#c_text');
  const d_text = document.querySelector('#d_text');
  const submitBtn = document.querySelector('#submit');
  const quiz1Btn = document.querySelector('#quiz1-btn');
  const quiz2Btn = document.querySelector('#quiz2-btn');
   
  let currentQuiz = 0
  let score = 0;

  let currentQuizData = quizData1;

  const loadQuiz =()=>{
    deselectAnswers();

    
  if (quiz1Btn.classList.contains('active')) {
    currentQuizData = retrievedQuizData.quizData1;
  } else if (quiz2Btn.classList.contains('active')) {
    currentQuizData = retrievedQuizData.quizData2;
  }

   
    let currentQuestionData = currentQuizData[currentQuiz];
    let answers = currentQuestionData.answers;

    questionEl.innerText = currentQuestionData.question;
    a_text.innerText = answers.a;
    b_text.innerText = answers.b;
    c_text.innerText = answers.c;
    d_text.innerText = answers.d;
   
  };
   
  const deselectAnswers=()=>{
    answerEls.forEach(answerEl=>answerEl.checked = false)
  };
   
  loadQuiz();
   
 
  const getSelected=()=> {
    let answer;
    answerEls.forEach(answerEl => {
      if(answerEl.checked) {
        answer = answerEl.id;
      }
    });
    return answer;
  };

 submitBtn.addEventListener('click', () => {
  const answer = getSelected();
  if(answer) {
    if(answer === currentQuizData[currentQuiz].correctAnswer) {
      score++;
    }
    currentQuiz++;
    if(currentQuiz < currentQuizData.length) {
      loadQuiz();
    } else {
      let quizLength = quizData1.length;
      if (quiz2Btn.classList.contains('active')) {
        quizLength = quizData2.length;
      }
      quiz.innerHTML = `
      <h2>You answered ${score}/${quizLength} questions correctly</h2>
      <button onclick="location.reload()" class="btn btn-warning">Reload</button>
      `;
    }
  }
});


  quiz1Btn.addEventListener('click', () => {
    currentQuizData = quizData1;
    currentQuiz = 0;
    score = 0;
    loadQuiz();
    quiz1Btn.classList.add('active');
    quiz2Btn.classList.remove('active');
  });

  quiz2Btn.addEventListener('click', () => {
    currentQuizData = quizData2;
    currentQuiz = 0;
    score = 0;
    loadQuiz();
    quiz2Btn.classList.add('active');
    quiz1Btn.classList.remove('active');
  });
 

};


 

komentarz 27 grudnia 2022 przez VBService Ekspert (253,400 p.)

Problem jest taki, że prawidłowa odpowiedz w quizDat to np.

    new Question(
      ...,
      'C', 
      new Answer('Java', 'C#', 'C++', 'C')
    ),
    new Question(
      ...,
      'CSS',
      new Answer('HTML', 'JQuery', 'CSS', 'XML')
    ),
   

a kod pobiera

  const getSelected=()=> {
    let answer;
    answerEls.forEach(answerEl => {
      if(answerEl.checked) {
        answer = answerEl.id;
      }
    });
    return answer;
  };

id z checkbox-a

<input type="radio" name="answer" id="a" class="answer" >

więc porównywane jest np. a == 'CSS'

 submitBtn.addEventListener('click', () => {
  const answer = getSelected();
  if(answer) {
    if(answer === currentQuizData[currentQuiz].correctAnswer) {
      score++;
    }
  }

  ...
}

 

zamień na

    new Question(
      ...,
      'd', 
      new Answer('Java', 'C#', 'C++', 'C')
    ),
    new Question(
      ...,
      'c',
      new Answer('HTML', 'JQuery', 'CSS', 'XML')
    ),

 

1
komentarz 28 grudnia 2022 przez AtomBari Początkujący (440 p.)
Dziękuję bardzo, działa ! jednak ta strona i to forum jest magiczne <3 dziękuję jeszcze raz :D

Podobne pytania

0 głosów
1 odpowiedź 140 wizyt
pytanie zadane 27 lipca 2015 w C i C++ przez Basze Użytkownik (630 p.)
0 głosów
2 odpowiedzi 195 wizyt
pytanie zadane 13 lipca 2015 w C i C++ przez Mati Łysy XD Nowicjusz (150 p.)
0 głosów
1 odpowiedź 487 wizyt
pytanie zadane 10 czerwca 2015 w C i C++ przez GhostPeHer Nowicjusz (140 p.)

92,579 zapytań

141,429 odpowiedzi

319,657 komentarzy

61,962 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...