Как инициализировать переменную путем выборки в Javascript - PullRequest
0 голосов
/ 09 мая 2020
• 1000 Я пробую вторую игру, произошла ошибка.

Это может быть из-за какой-то переменной clicked и correct не инициализирован на «0».

Есть ли проблемы с объявлением позиции?

Если у кого-то есть мнение, дайте мне знать. извините за долгую работу ниже.

// const fetch = require("node-fetch");

var apikey = "https://opentdb.com/api.php?amount=2&type=multiple";

$(".btn").on("click", ".start", function() {
  let clicked = 0;
  let correct = 0;

  $(".header").text("Is fetching...");
  $(".content").text("just a moment please");
  $(".start").hide()

  fetch(apikey)
    .then(response => response.json())
    .then(json => {
      display(json, 0);
      $(".btn").on("click", ".choice", function() {
        console.log("clicked", clicked);
        correct += $(this).html() === json.results[clicked].correct_answer ? 1 : 0
        clicked++;
        console.log(correct);
        if (clicked == json.results.length) {
          showresult(correct);
        } else {
          display(json, clicked);
        }
      });

      $(".btn").on("click", ".retry", function() {
        console.log("#");
        document.querySelector('.btn').innerHTML = "<button class='start'>start</button>";
      });
    });
});

function display(json, clicked) {
  const arr = [json.results[clicked].correct_answer].concat(json.results[clicked].incorrect_answers);

  $(".header").text("Question" + Number(clicked + 1));
  $(".category").text("[category] : " + json.results[clicked].category);
  $(".difficulty").text("[difficulty] : " + json.results[clicked].difficulty);
  $(".content").text(json.results[clicked].question);
  let html = "";
  for (let i = 0; i < arr.length; i++) {
    html += "<button class='choice'>" + shuffle(arr)[i] + "</button><br>";
  }
  document.querySelector('.btn').innerHTML = html;
}

function showresult(correct) {
  $(".header").text("Number of correct answers is " + correct);
  $(".category").hide()
  $(".difficulty").hide()
  $(".content").text("Challenge again");

  document.querySelector('.btn').innerHTML = "<button class='retry'>retry</button>";
}

function shuffle(array) {
  var currentIndex = array.length,
    temporaryValue, randomIndex;

  // While there remain elements to shuffle...
  while (0 !== currentIndex) {

    // Pick a remaining element...
    randomIndex = Math.floor(Math.random() * currentIndex);
    currentIndex -= 1;

    // And swap it with the current element.
    temporaryValue = array[currentIndex];
    array[currentIndex] = array[randomIndex];
    array[randomIndex] = temporaryValue;
  }

  return array;
}
<!DOCTYPE html>
<html>
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script data-main="js/main.js" src="bower_components/requirejs/require.js"></script>

<head>
  <meta charset="UTF-8">
  <title>title</title>
</head>

<body>
  <h1 class="header">Welcome</h1>

  <h2 class="category"></h2>
  <h2 class="difficulty"></h2>
  <hr>
  <h3 class="content">Press the following button</h3>
  <hr>

  <div class="btn">
    <button type="button" class="start">Start</button>
  </div>
</body>

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

</html>

1 Ответ

1 голос
/ 09 мая 2020

Каждый раз, когда вы запускаете игру, вы добавляете еще один обработчик click к кнопкам .choice. Поэтому, когда вы играете во вторую игру, обработчик запускается дважды, когда вы нажимаете кнопку.

Вам нужно просто привязать обработчик один раз, а не каждый раз, когда вы нажимаете.

Вам нужно будет переместить некоторые переменные в глобальные переменные.

// const fetch = require("node-fetch");

var apikey = "https://opentdb.com/api.php?amount=2&type=multiple";
let clicked;
let correct;
let global_json;

$(".btn").on("click", ".start", function() {
  clicked = 0;
  correct = 0;

  $(".header").text("Is fetching...");
  $(".content").text("just a moment please");
  $(".start").hide()

  fetch(apikey)
    .then(response => response.json())
    .then(json => {
      global_json = json;
      display(json, 0);
    });
});

$(".btn").on("click", ".choice", function() {
  console.log("clicked", clicked);
  correct += $(this).html() === global_json.results[clicked].correct_answer ? 1 : 0
  clicked++;
  console.log(correct);
  if (clicked == json.results.length) {
    showresult(correct);
  } else {
    display(global_json, clicked);
  }
});

$(".btn").on("click", ".retry", function() {
  console.log("#");
  document.querySelector('.btn').innerHTML = "<button class='start'>start</button>";
});

function display(json, clicked) {
  const arr = [json.results[clicked].correct_answer].concat(json.results[clicked].incorrect_answers);

  $(".header").text("Question" + Number(clicked + 1));
  $(".category").text("[category] : " + json.results[clicked].category);
  $(".difficulty").text("[difficulty] : " + json.results[clicked].difficulty);
  $(".content").text(json.results[clicked].question);
  let html = "";
  for (let i = 0; i < arr.length; i++) {
    html += "<button class='choice'>" + shuffle(arr)[i] + "</button><br>";
  }
  document.querySelector('.btn').innerHTML = html;
}

function showresult(correct) {
  $(".header").text("Number of correct answers is " + correct);
  $(".category").hide()
  $(".difficulty").hide()
  $(".content").text("Challenge again");

  document.querySelector('.btn').innerHTML = "<button class='retry'>retry</button>";
}

function shuffle(array) {
  var currentIndex = array.length,
    temporaryValue, randomIndex;

  // While there remain elements to shuffle...
  while (0 !== currentIndex) {

    // Pick a remaining element...
    randomIndex = Math.floor(Math.random() * currentIndex);
    currentIndex -= 1;

    // And swap it with the current element.
    temporaryValue = array[currentIndex];
    array[currentIndex] = array[randomIndex];
    array[randomIndex] = temporaryValue;
  }

  return array;
}
<!DOCTYPE html>
<html>
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script data-main="js/main.js" src="bower_components/requirejs/require.js"></script>

<head>
  <meta charset="UTF-8">
  <title>title</title>
</head>

<body>
  <h1 class="header">Welcome</h1>

  <h2 class="category"></h2>
  <h2 class="difficulty"></h2>
  <hr>
  <h3 class="content">Press the following button</h3>
  <hr>

  <div class="btn">
    <button type="button" class="start">Start</button>
  </div>
</body>

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

</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...