Home > Net >  button not triggering call back function when clicked on. No way to know why as no error's thro
button not triggering call back function when clicked on. No way to know why as no error's thro

Time:05-14

I'm using an event listener on the button element. The user's first asked to select a language. Once they've have done so they are presented with the button in question. Clicking on it triggers a call back function, enabling the user to get started with the quiz. Everything was working as it should be up until this morning. But now nothing happens when I click on said button. The console doesn't even throw an error, which would give me a clue as to where something might have gone wrong.

I went on MDN documentations - see link below - where they said that a button with type="button": "has no default behavior, and does nothing when pressed by default. It can have client-side scripts listen to the element's events, which are triggered when the events occur."

I got rid of this attribute but the button's still not responding.

const intro = document.querySelector(".intro");
const finalMessage = document.querySelector(".finalMessage")
const select = document.querySelector("select");
const finalScoreImage = document.getElementById("finalScoreImage");
const welcomeText = document.querySelector(".welcomeText")
const btn = document.querySelector("button");
const header = document.querySelector("header")
const animeQuiz = document.querySelector(".animeQuiz");
const timer = document.querySelector(".timer");
const anime_picture = document.querySelector(".anime_picture img");
const choices = [...document.querySelector(".choices").children];
const numberOfChoices = choices.length;
const finalScore = document.querySelector(".finalScore");
const squares = document.querySelector(".squares");
const progressBar = document.querySelector(".progressBar");
const squaresArray = [...squares.children];
let element;
[score, counter, time, timeUp] = [0, 0, 0, 10];
let Clock;

let japaneseAnime = []


let japaneseAnimeJapanese = [
  {
  name: "ドラゴンボール",
  picture: "https://dbgbh.bn-ent.net/assets/img/news/news_thumb_kv.png"
},
{
  name: "進撃の巨人",
  picture: "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSJYjy_bS8t3ScWyG7q94fIltnar3ChaOHmGA&usqp=CAU"
},
{
  name: "ナルト",
  picture: "https://res.cloudinary.com/jerrick/image/upload/v1616592065/605b3cc118e784001e22da0d.jpg"
},
{
  name: "鬼滅の刃",
  picture: "https://cdn.vox-cdn.com/thumbor/gcVHhhZ4VwVswvbDPvI-RfQ7ECQ=/1400x1050/filters:format(png)/cdn.vox-cdn.com/uploads/chorus_asset/file/19721018/Tanjiro__Demon_Slayer_.png"
},
{
  name: "攻殻機動隊",
  picture: "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS8VBbI5HMki5cmjP_Gq0TdyA6VZn_0_fmkhg&usqp=CAU"
}
]


let japaneseAnimeEnglish = [
  {
  name: "dragon ball",
  picture: "https://dbgbh.bn-ent.net/assets/img/news/news_thumb_kv.png"
},
{
  name: "Attack On Titans",
  picture: "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSJYjy_bS8t3ScWyG7q94fIltnar3ChaOHmGA&usqp=CAU"
},
{
  name: "naruto",
  picture: "https://res.cloudinary.com/jerrick/image/upload/v1616592065/605b3cc118e784001e22da0d.jpg"
},
{
  name: "Demon Slayer",
  picture: "https://cdn.vox-cdn.com/thumbor/gcVHhhZ4VwVswvbDPvI-RfQ7ECQ=/1400x1050/filters:format(png)/cdn.vox-cdn.com/uploads/chorus_asset/file/19721018/Tanjiro__Demon_Slayer_.png"
},
{
  name: "Ghost in the shell",
  picture: "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS8VBbI5HMki5cmjP_Gq0TdyA6VZn_0_fmkhg&usqp=CAU"
}
]


select.addEventListener("change", selectLanguage)

function selectLanguage() {
  if(select.value === "日本語") {
    welcomeText.innerHTML = "アニメクイズへようこそ下のボタンをクリックしてゲームを初めて下さい";
    btn.innerHTML = "クイズボタン";
    header.innerHTML = "画像に対応する名称を選択する";
    japaneseAnime = japaneseAnimeJapanese;
  } else {
    welcomeText.innerHTML = "Welcome to the amime quiz click on the button below to get started";
    btn.innerHTML = "quiz button";
    header.innerHTML = "select the name corresponding to the image"
    japaneseAnime = japaneseAnimeEnglish;
  }
  btn.style.display = "block"
  select.style.display = "none"
}


btn.addEventListener("click", startQuiz);


function startQuiz() {
  intro.style.display = "none";
  animeQuiz.style.display = "flex";
  finalScore.style.display = "none"
  app();
  console.log("josue")
}

// generates number between 0 and 3
function randomNumber() {
  return Math.floor(Math.random()*numberOfChoices);
}

// generates array of uniques numbers
function uniqueNumbers() {
  let listUniqueNumbers = new Set();
  while(listUniqueNumbers.size < numberOfChoices) {
    listUniqueNumbers.add(randomNumber());
  }
  return [...listUniqueNumbers];
}

// display choices
function displayChoicesAndPicture() {
  anime_picture.src = japaneseAnime[counter].picture;
  let unique = uniqueNumbers();
  choices.forEach((choice, i) => {
    choice.innerHTML = japaneseAnime[unique[i]].name;
  })
}

// checking user answer
function userAnswer() {
  for(var i = 0; i < japaneseAnime.length; i  ) {
    choices[i].addEventListener("click", checkAnswer);
  }
}

function checkAnswer(e) {
  e.target.innerHTML === japaneseAnime[counter].name ? rightAnswer() : wrongAnswer();
}

function rightAnswer() {
  document.getElementById(counter).style.backgroundColor = "green"
  score  ;
  console.log(score)
  update();
}

function wrongAnswer() {
  document.getElementById(counter).style.backgroundColor = "red"
  update();
}

function update() {
  if(counter < numberOfChoices - 1) {
    time = 0;
    counter  ;
    displayChoicesAndPicture();
  } else {
    animeQuiz.style.display = "none"
    userScore();
  }
}

function userScore() {
  finalScore.style.display = "block";
  finalMessage.style.display = "flex";

  let scoreDisplayed = (score / numberOfChoices) * 100;
  finalMessage.innerHTML = `Well done you've completed the quiz. You score is ${scoreDisplayed}`
}

  function displaySquares() {
    for(var i = 0; i < numberOfChoices; i  ) {
      element = document.createElement("div");
      element.setAttribute("class", "square");
      element.setAttribute("id", i);
      squares.appendChild(element);
    }
  }

  function timedQuiz() {
    if(time < timeUp) {
      time  
    } else {
      time = 0;
      wrongAnswer();
      update();
    }
      timer.innerHTML = time;
  }


  const app = () => {
    displayChoicesAndPicture();
    userAnswer();
    displaySquares();
    setInterval(timedQuiz, 1000)
  }
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  position: relative;
  display: flex;
  justify-content: center;
  align-items: center;

  min-height: 100vh;
  font-family: sans-serif;
  background-repeat: no-repeat;
}

p {
  position: absolute;
  display: flex;
  justify-content: center;
  align-items: center;
  height: 300px;
  width: 300px;
}



.welcomeText {
  position: absolute;
  color: white;
  font-size: 35px;
  color: rgb(255,0,0);
}

button {
  position: absolute;
  transform: translateY(10ch);
}

select {
  position: absolute;
  transform: translateY(20ch);

}

.intro_image {
  position: fixed;
  object-fit: cover;
}

.intro {
  display: flex;
  justify-content: center;
  align-items: center;
  /* position: fixed; */

  height: 100%;
  width: 100%;
  border: 1px blue solid;
}

.animeQuiz {
  display: none;
  justify-content: center;
  align-items: center;
  position: relative;

  height: 800px;
  width: 800px;
  border: 1px red solid;
}

.anime_picture {
  height: 400px;
  width: 400px;
  position: absolute;
}

.choices {
  height: 100px;
  width: 100%;
  border: 1px blue solid;
  bottom: 0;
  position: absolute;

  display: flex;
  justify-content: space-around;
  align-items: center;
}

.finalScore {
  display: none;

  position: relative;
  height: 400px;
  width: 400px;
  border: 1px blue solid;
  background: red;
}

.hide {
  display: none;
}

.show {
  display: block;
}

.finalMessage {
  position: absolute;

  justify-content: center;
  align-items: center;

  display: none;
  border: solid black 1px;
  border-radius: 100%;
  height: 200px;
  width: 500px;

  color: blue;
  transform: translateY(-120px);
  transform: translateX(500px);
}

.choices > div {
  height: 80px;
  width: 150px;
  border: 1px black solid;
  background-color: #EE6F57;
  cursor: pointer;
  border-radius: 10px;
}

.choices > div:hover {
  color: #EE6F;
}

.welcomeText {
  width: auto;
  height: auto;
  background: white;
  border-radius: 5px;
}

.choice {
  display: flex;
  justify-content: center;
  align-items: center;

  padding: 10px;
  color: white;
}

img {
  height: 100%;
  width: 100%;
  object-fit: cover;
}

header {
  display: flex;
  justify-content: center;
  align-items: center;

  width: 100%;
  height: 100px;
  border: 1px black solid;
  position: absolute;
  top: 0;
  font-family: fantasy;
}


.square {
  height: 15px;
  width: 15px;
  background-color: gray;
  bottom: 150px;
  margin: 10px;
}

.squares {
  position: absolute;
  bottom: 100px;
  display: flex;
  justify-content: space-around;
}

.timer {
  position: absolute;
  bottom: 150px;
}

.progressBar {
  height: 10px;
  width: 300px;
  position: absolute;
  bottom: 140px;
  background-color: grey;
  border: 1px black solid;
}

button {
  display: none;
}
<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="index.css">
    <title>anime page</title>
  </head>
  <body>
    <div >
      <img  src="images/backgroundImage.jpeg" alt="">
      <p><div class=welcomeText>Welcome to the amime quiz click on the button below to get started</div></p>
      <button name="button">button quiz</button>
      <select  name="">
        <option value="">Select a language</option>
        <option value="english">English</option>
        <option value="日本語">日本語</option>
      </select>
    </div>
    <div >
      <div >
        <img src="" alt="">
      </div>
      <div >
        <div >
          <div ></div>
        </div>
        <div >
          <div ></div>
        </div>
        <div >
          <div ></div>
        </div>
        <div >
          <div ></div>
        </div>
        <div >
          <div ></div>
        </div>
      </div>
      <header>
        <div >Select the name corresponding to the image</div>
      </header>
      <div ></div>
      <div ></div>
      <div ></div>
    </div>
    <div >
      <img src="images/dragon-ball-z-goku.gif" alt="">
    </div>
    <p >
      <div ></div>
    </p>

  </body>
  <script src="index.js" type="text/javascript"></script>
</html>

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button

const intro = document.querySelector(".intro");
const select = document.querySelector("select");
const finalScoreImage = document.getElementById("finalScoreImage");
const welcomeText = document.querySelector(".welcomeText")
const btn = document.querySelector("button");
const header = document.querySelector("header")
const animeQuiz = document.querySelector(".animeQuiz");
const timer = document.querySelector(".timer");
const anime_picture = document.querySelector(".anime_picture img");
const choices = [...document.querySelector(".choices").children];
const numberOfChoices = choices.length;
const finalScore = document.querySelector(".finalScore");
const squares = document.querySelector(".squares");
const progressBar = document.querySelector(".progressBar");
console.log(progressBar)
const squaresArray = [...squares.children];
let element;
[score, counter, time, timeUp] = [0, 0, 0, 10];
let Clock;

let japaneseAnime = []


let japaneseAnimeJapanese = [
  {
  name: "ドラゴンボール",
  picture: "https://dbgbh.bn-ent.net/assets/img/news/news_thumb_kv.png"
},
{
  name: "進撃の巨人",
  picture: "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSJYjy_bS8t3ScWyG7q94fIltnar3ChaOHmGA&usqp=CAU"
},
{
  name: "ナルト",
  picture: "https://res.cloudinary.com/jerrick/image/upload/v1616592065/605b3cc118e784001e22da0d.jpg"
},
{
  name: "鬼滅の刃",
  picture: "https://cdn.vox-cdn.com/thumbor/gcVHhhZ4VwVswvbDPvI-RfQ7ECQ=/1400x1050/filters:format(png)/cdn.vox-cdn.com/uploads/chorus_asset/file/19721018/Tanjiro__Demon_Slayer_.png"
},
{
  name: "攻殻機動隊",
  picture: "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS8VBbI5HMki5cmjP_Gq0TdyA6VZn_0_fmkhg&usqp=CAU"
}
]


let japaneseAnimeEnglish = [
  {
  name: "dragon ball",
  picture: "https://dbgbh.bn-ent.net/assets/img/news/news_thumb_kv.png"
},
{
  name: "Attack On Titans",
  picture: "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSJYjy_bS8t3ScWyG7q94fIltnar3ChaOHmGA&usqp=CAU"
},
{
  name: "naruto",
  picture: "https://res.cloudinary.com/jerrick/image/upload/v1616592065/605b3cc118e784001e22da0d.jpg"
},
{
  name: "Demon Slayer",
  picture: "https://cdn.vox-cdn.com/thumbor/gcVHhhZ4VwVswvbDPvI-RfQ7ECQ=/1400x1050/filters:format(png)/cdn.vox-cdn.com/uploads/chorus_asset/file/19721018/Tanjiro__Demon_Slayer_.png"
},
{
  name: "Ghost in the shell",
  picture: "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS8VBbI5HMki5cmjP_Gq0TdyA6VZn_0_fmkhg&usqp=CAU"
}
]


select.addEventListener("change", selectLanguage)

function selectLanguage() {
  if(select.value === "日本語") {
    welcomeText.innerHTML = "アニメクイズへようこそ下のボタンをクリックしてゲームを初めて下さい";
    btn.innerHTML = "クイズボタン";
    header.innerHTML = "画像に対応する名称を選択する";
    japaneseAnime = japaneseAnimeJapanese;
  } else {
    welcomeText.innerHTML = "Welcome to the amime quiz click on the button below to get started";
    btn.innerHTML = "quiz button";
    header.innerHTML = "select the name corresponding to the image"
    japaneseAnime = japaneseAnimeEnglish;
  }
  btn.style.display = "block"
  select.style.display = "none"
}


btn.addEventListener("click", startQuiz);

function startQuiz() {
  intro.style.display = "none";
  animeQuiz.style.display = "flex";
  app();
}

// generates number between 0 and 3
function randomNumber() {
  return Math.floor(Math.random()*numberOfChoices);
}

// generates array of uniques numbers
function uniqueNumbers() {
  let listUniqueNumbers = new Set();
  while(listUniqueNumbers.size < numberOfChoices) {
    listUniqueNumbers.add(randomNumber());
  }
  return [...listUniqueNumbers];
}

// display choices
function displayChoicesAndPicture() {
  anime_picture.src = japaneseAnime[counter].picture;
  let unique = uniqueNumbers();
  choices.forEach((choice, i) => {
    choice.innerHTML = japaneseAnime[unique[i]].name;
  })
}

// checking user answer
function userAnswer() {
  for(var i = 0; i < japaneseAnime.length; i  ) {
    choices[i].addEventListener("click", checkAnswer);
  }
}

function checkAnswer(e) {
  e.target.innerHTML === japaneseAnime[counter].name ? rightAnswer() : wrongAnswer();
}

function rightAnswer() {
  document.getElementById(counter).style.backgroundColor = "green"
  score  ;
  console.log(score)
  update();
}

function wrongAnswer() {
  document.getElementById(counter).style.backgroundColor = "red"
  update();
}

function update() {
  if(counter < numberOfChoices - 1) {
    time = 0;
    counter  ;
    displayChoicesAndPicture();
  } else {
    animeQuiz.style.display = "none"
    userScore();
  }
}

function userScore() {
  finalScore.style.display = "flex";
  finalScoreImage.style.display = "flex"
  let scoreDisplayed = (score / numberOfChoices) * 100;
  console.log(score)
  finalScore.innerHTML = `<p>your final score is ${scoreDisplayed}%</p>`
  // `<p>your final score is ${scoreDisplayed}%</p>`
}

  function displaySquares() {
    for(var i = 0; i < numberOfChoices; i  ) {
      element = document.createElement("div");
      element.setAttribute("class", "square");
      element.setAttribute("id", i);
      squares.appendChild(element);
    }
  }

  function timedQuiz() {
    if(time < timeUp) {
      time  
    } else {
      time = 0;
      wrongAnswer();
      update();
    }
      timer.innerHTML = time;
  }


  const app = () => {
    displayChoicesAndPicture();
    userAnswer();
    displaySquares();
    setInterval(timedQuiz, 1000)
  }
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  position: relative;
  display: flex;
  justify-content: center;
  align-items: center;

  min-height: 100vh;
  font-family: sans-serif;
  background-repeat: no-repeat;
}

p {
  position: absolute;
  display: flex;
  justify-content: center;
  align-items: center;
  height: 300px;
  width: 300px;
  /* background-color: red; */
}

.welcomeText {
  position: absolute;
  color: white;
  font-size: 35px;
  color: rgb(255,0,0);
}

button {
  position: absolute;
  transform: translateY(10ch);
}

select {
  position: absolute;
  transform: translateY(20ch);

}

.intro_image {
  position: fixed;
  object-fit: cover;
}

.intro {
  display: flex;
  justify-content: center;
  align-items: center;
  /* position: fixed; */

  height: 100%;
  width: 100%;
  border: 1px blue solid;
}

.animeQuiz {
  display: none;
  justify-content: center;
  align-items: center;
  position: relative;

  height: 800px;
  width: 800px;
  border: 1px red solid;
}

.anime_picture {
  height: 400px;
  width: 400px;
  position: absolute;
}

.choices {
  height: 100px;
  width: 100%;
  border: 1px blue solid;
  bottom: 0;
  position: absolute;

  display: flex;
  justify-content: space-around;
  align-items: center;
}

.finalScore {
  position: relative;
  display: none;
  justify-content: center;
  /* align-items: center;
  height: 400px;
  width: 400px;
  border: 1px blue solid; */
  /* background: red; */
}

#finalScoreImage {
  display: none;
}

.finalMessage {
  position: absolute;
}

.choices > div {
  height: 80px;
  width: 150px;
  border: 1px black solid;
  background-color: #EE6F57;
  cursor: pointer;
  border-radius: 10px;
}

.choices > div:hover {
  color: #EE6F;
}

.welcomeText {
  width: auto;
  height: auto;
  background: white;
  border-radius: 5px;
}

.choice {
  display: flex;
  justify-content: center;
  align-items: center;

  padding: 10px;
  color: white;
}

img {
  height: 100%;
  width: 100%;
  object-fit: cover;
}

header {
  display: flex;
  justify-content: center;
  align-items: center;

  width: 100%;
  height: 100px;
  border: 1px black solid;
  position: absolute;
  top: 0;
  font-family: fantasy;
}

p .finalMessage {
  position: absolute;
}

.square {
  height: 15px;
  width: 15px;
  background-color: gray;
  bottom: 150px;
  margin: 10px;
}

.squares {
  position: absolute;
  bottom: 100px;
  display: flex;
  justify-content: space-around;
}

.timer {
  position: absolute;
  bottom: 150px;
}

.progressBar {
  height: 10px;
  width: 300px;
  position: absolute;
  bottom: 140px;
  background-color: grey;
  border: 1px black solid;
}

button {
  display: none;
}
<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="index.css">
    <title>anime page</title>
  </head>
  <body>
    <div >
      <img  src="images/backgroundImage.jpeg" alt="">
      <p><div class=welcomeText>Welcome to the amime quiz click on the button below to get started</div></p>
      <button type="button" name="button">button quiz</button>
      <select  name="">
        <option value="">Select a language</option>
        <option value="english">English</option>
        <option value="日本語">日本語</option>
      </select>
    </div>
    <div >
      <div >
        <img src="" alt="">
      </div>
      <div >
        <div >
          <div ></div>
        </div>
        <div >
          <div ></div>
        </div>
        <div >
          <div ></div>
        </div>
        <div >
          <div ></div>
        </div>
        <div >
          <div ></div>
        </div>
      </div>
      <header>
        <div >Select the name corresponding to the image</div>
      </header>
      <div ></div>
      <div ></div>
      <div ></div>
    </div>
    <div >
      <img id="finalScoreImage" src="images/dragon-ball-z-goku.gif" alt="">
      <p >well done, you've completed the quiz</p>
    </div>


  </body>
  <script src="index.js" type="text/javascript"></script>
</html>

CodePudding user response:

You have invalid HTML. P cannot contain a DIV and the empty P created by the two

<p><div class=welcomeText></div></p>

and

<p >
  <div ></div>
</p>

you have blocks clicking the select

Here is a working version

const intro = document.querySelector(".intro");
const finalMessage = document.querySelector(".finalMessage")
const select = document.querySelector("select");
const finalScoreImage = document.getElementById("finalScoreImage");
const welcomeText = document.querySelector(".welcomeText")
const btn = document.querySelector("button");
const header = document.querySelector("header")
const animeQuiz = document.querySelector(".animeQuiz");
const timer = document.querySelector(".timer");
const anime_picture = document.querySelector(".anime_picture img");
const choices = [...document.querySelector(".choices").children];
const numberOfChoices = choices.length;
const finalScore = document.querySelector(".finalScore");
const squares = document.querySelector(".squares");
const progressBar = document.querySelector(".progressBar");
const squaresArray = [...squares.children];
let element;
[score, counter, time, timeUp] = [0, 0, 0, 10];
let Clock;

let japaneseAnime = []


let japaneseAnimeJapanese = [{
    name: "ドラゴンボール",
    picture: "https://dbgbh.bn-ent.net/assets/img/news/news_thumb_kv.png"
  },
  {
    name: "進撃の巨人",
    picture: "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSJYjy_bS8t3ScWyG7q94fIltnar3ChaOHmGA&usqp=CAU"
  },
  {
    name: "ナルト",
    picture: "https://res.cloudinary.com/jerrick/image/upload/v1616592065/605b3cc118e784001e22da0d.jpg"
  },
  {
    name: "鬼滅の刃",
    picture: "https://cdn.vox-cdn.com/thumbor/gcVHhhZ4VwVswvbDPvI-RfQ7ECQ=/1400x1050/filters:format(png)/cdn.vox-cdn.com/uploads/chorus_asset/file/19721018/Tanjiro__Demon_Slayer_.png"
  },
  {
    name: "攻殻機動隊",
    picture: "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS8VBbI5HMki5cmjP_Gq0TdyA6VZn_0_fmkhg&usqp=CAU"
  }
]


let japaneseAnimeEnglish = [{
    name: "dragon ball",
    picture: "https://dbgbh.bn-ent.net/assets/img/news/news_thumb_kv.png"
  },
  {
    name: "Attack On Titans",
    picture: "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSJYjy_bS8t3ScWyG7q94fIltnar3ChaOHmGA&usqp=CAU"
  },
  {
    name: "naruto",
    picture: "https://res.cloudinary.com/jerrick/image/upload/v1616592065/605b3cc118e784001e22da0d.jpg"
  },
  {
    name: "Demon Slayer",
    picture: "https://cdn.vox-cdn.com/thumbor/gcVHhhZ4VwVswvbDPvI-RfQ7ECQ=/1400x1050/filters:format(png)/cdn.vox-cdn.com/uploads/chorus_asset/file/19721018/Tanjiro__Demon_Slayer_.png"
  },
  {
    name: "Ghost in the shell",
    picture: "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS8VBbI5HMki5cmjP_Gq0TdyA6VZn_0_fmkhg&usqp=CAU"
  }
]


select.addEventListener("change", selectLanguage)

function selectLanguage() {
  if (select.value === "日本語") {
    welcomeText.innerHTML = "アニメクイズへようこそ下のボタンをクリックしてゲームを初めて下さい";
    btn.innerHTML = "クイズボタン";
    header.innerHTML = "画像に対応する名称を選択する";
    japaneseAnime = japaneseAnimeJapanese;
  } else {
    welcomeText.innerHTML = "Welcome to the amime quiz click on the button below to get started";
    btn.innerHTML = "quiz button";
    header.innerHTML = "select the name corresponding to the image"
    japaneseAnime = japaneseAnimeEnglish;
  }
  btn.style.display = "block"
  select.style.display = "none"
}


btn.addEventListener("click", startQuiz);


function startQuiz() {
  intro.style.display = "none";
  animeQuiz.style.display = "flex";
  finalScore.style.display = "none"
  app();
  console.log("josue")
}

// generates number between 0 and 3
function randomNumber() {
  return Math.floor(Math.random() * numberOfChoices);
}

// generates array of uniques numbers
function uniqueNumbers() {
  let listUniqueNumbers = new Set();
  while (listUniqueNumbers.size < numberOfChoices) {
    listUniqueNumbers.add(randomNumber());
  }
  return [...listUniqueNumbers];
}

// display choices
function displayChoicesAndPicture() {
  anime_picture.src = japaneseAnime[counter].picture;
  let unique = uniqueNumbers();
  choices.forEach((choice, i) => {
    choice.innerHTML = japaneseAnime[unique[i]].name;
  })
}

// checking user answer
function userAnswer() {
  for (var i = 0; i < japaneseAnime.length; i  ) {
    choices[i].addEventListener("click", checkAnswer);
  }
}

function checkAnswer(e) {
  e.target.innerHTML === japaneseAnime[counter].name ? rightAnswer() : wrongAnswer();
}

function rightAnswer() {
  document.getElementById(counter).style.backgroundColor = "green"
  score  ;
  console.log(score)
  update();
}

function wrongAnswer() {
  document.getElementById(counter).style.backgroundColor = "red"
  update();
}

function update() {
  if (counter < numberOfChoices - 1) {
    time = 0;
    counter  ;
    displayChoicesAndPicture();
  } else {
    animeQuiz.style.display = "none"
    userScore();
  }
}

function userScore() {
  finalScore.style.display = "block";
  finalMessage.style.display = "flex";

  let scoreDisplayed = (score / numberOfChoices) * 100;
  finalMessage.innerHTML = `Well done you've completed the quiz. You score is ${scoreDisplayed}`
}

function displaySquares() {
  for (var i = 0; i < numberOfChoices; i  ) {
    element = document.createElement("div");
    element.setAttribute("class", "square");
    element.setAttribute("id", i);
    squares.appendChild(element);
  }
}

function timedQuiz() {
  if (time < timeUp) {
    time  
  } else {
    time = 0;
    wrongAnswer();
    update();
  }
  timer.innerHTML = time;
}


const app = () => {
  displayChoicesAndPicture();
  userAnswer();
  displaySquares();
  setInterval(timedQuiz, 1000)
}
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  position: relative;
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 100vh;
  font-family: sans-serif;
  background-repeat: no-repeat;
}

p {
  position: absolute;
  display: flex;
  justify-content: center;
  align-items: center;
  height: 300px;
  width: 300px;
}

.welcomeText {
  position: absolute;
  color: white;
  font-size: 35px;
  color: rgb(255, 0, 0);
}

button {
  position: absolute;
  transform: translateY(10ch);
}

select {
  position: absolute;
  transform: translateY(20ch);
}

.intro_image {
  position: fixed;
  object-fit: cover;
}

.intro {
  display: flex;
  justify-content: center;
  align-items: center;
  /* position: fixed; */
  height: 100%;
  width: 100%;
  border: 1px blue solid;
}

.animeQuiz {
  display: none;
  justify-content: center;
  align-items: center;
  position: relative;
  height: 800px;
  width: 800px;
  border: 1px red solid;
}

.anime_picture {
  height: 400px;
  width: 400px;
  position: absolute;
}

.choices {
  height: 100px;
  width: 100%;
  border: 1px blue solid;
  bottom: 0;
  position: absolute;
  display: flex;
  justify-content: space-around;
  align-items: center;
}

.finalScore {
  display: none;
  position: relative;
  height: 400px;
  width: 400px;
  border: 1px blue solid;
  background: red;
}

.hide {
  display: none;
}

.show {
  display: block;
}

.finalMessage {
  position: absolute;
  justify-content: center;
  align-items: center;
  display: none;
  border: solid black 1px;
  border-radius: 100%;
  height: 200px;
  width: 500px;
  color: blue;
  transform: translateY(-120px);
  transform: translateX(500px);
}

.choices>div {
  height: 80px;
  width: 150px;
  border: 1px black solid;
  background-color: #EE6F57;
  cursor: pointer;
  border-radius: 10px;
}

.choices>div:hover {
  color: #EE6F;
}

.welcomeText {
  width: auto;
  height: auto;
  background: white;
  border-radius: 5px;
}

.choice {
  display: flex;
  justify-content: center;
  align-items: center;
  padding: 10px;
  color: white;
}

img {
  height: 100%;
  width: 100%;
  object-fit: cover;
}

header {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 100%;
  height: 100px;
  border: 1px black solid;
  position: absolute;
  top: 0;
  font-family: fantasy;
}

.square {
  height: 15px;
  width: 15px;
  background-color: gray;
  bottom: 150px;
  margin: 10px;
}

.squares {
  position: absolute;
  bottom: 100px;
  display: flex;
  justify-content: space-around;
}

.timer {
  position: absolute;
  bottom: 150px;
}

.progressBar {
  height: 10px;
  width: 300px;
  position: absolute;
  bottom: 140px;
  background-color: grey;
  border: 1px black solid;
}

button {
  display: none;
}
<!DOCTYPE html>
<html lang="en" dir="ltr">

<head>
  <meta charset="utf-8">
  <link rel="stylesheet" href="index.css">
  <title>anime page</title>
</head>

<body>
  <div >
    <img  src="images/backgroundImage.jpeg" alt="">
    <div class=welcomeText>Welcome to the amime quiz click on the button below to get started</div>
    <button name="button">button quiz</button>
    <select  name="">
      <option value="">Select a language</option>
      <option value="english">English</option>
      <option value="日本語">日本語</option>
    </select>
  </div>
  <div >
    <div >
      <img src="" alt="">
    </div>
    <div >
      <div >
        <div ></div>
      </div>
      <div >
        <div ></div>
      </div>
      <div >
        <div ></div>
      </div>
      <div >
        <div ></div>
      </div>
      <div >
        <div ></div>
      </div>
    </div>
    <header>
      <div >Select the name corresponding to the image</div>
    </header>
    <div ></div>
    <div ></div>
    <div ></div>
  </div>
  <div >
    <img src="images/dragon-ball-z-goku.gif" alt="">
  </div>
  <div >
    
  </div>

</body>
<script src="index.js" type="text/javascript"></script>

</html>

  • Related