Почему в этом HTML-коде клик дает 2 вместо 1?

Кажется, мой код интерпретирует, что я нажимаю дважды, но когда я уменьшаю число в функции CookieClick(), оно дает ноль...

let num = 0;
let upgrade = 1;
let noCookiesCheck = 0;
let isThereNoCookies = false;
let mouseupgrade = 0;
let autoClickInterval = 1000; // Interval in milliseconds
let upgradeInflation = 1;

function checker() {
  document.getElementById("cookieCount").innerHTML = num;
  document.getElementById("grandma").innerHTML = upgrade - 1;
  if (isThereNoCookies && noCookiesCheck >= 1) {
    document.getElementById("noCookies").innerHTML = " Not enough Cookies!";
    noCookiesCheck -= 20;
  } else {
    document.getElementById("noCookies").innerHTML = ""; // Clear the message
    isThereNoCookies = false; // Reset the flag
  }
  document.getElementById("inflationCase").innerHTML = Math.floor(20 * upgradeInflation);
}

function cookieClick() {
  num += upgrade;

}

function darker() {
  var body = document.body;
  var cookies = document.getElementsByClassName("cookie");
  for (var i = 0; i < cookies.length; i++) {
    cookies[i].style.backgroundColor = "#390100";
  }
  body.style.backgroundColor = "#3b53ff";
}

function b1() {
  const cost = Math.floor(20 * upgradeInflation);
  if (num >= cost) {
    num -= cost;
    upgrade += 1;
    upgradeInflation += 0.15;
  } else {
    noCookiesCheck = 5000; // Set a longer duration
    isThereNoCookies = true;
  }
}

function b2() {
  const cost = 10; // Fixed cost for auto-click
  if (num >= cost) {
    num -= cost;
    mouseupgrade += 1;
    document.getElementById("mouseclick").innerHTML = mouseupgrade;
  } else {
    noCookiesCheck = 5000; // Set a longer duration
    isThereNoCookies = true;
  }
}

// Auto increment cookies based on mouseupgrade
function autoCookieClick() {
  if (mouseupgrade > 0) {
    num += mouseupgrade;
  }
}

// Call checker() every 100 milliseconds
setInterval(checker, 100);

// Call autoCookieClick() every second
setInterval(autoCookieClick, autoClickInterval);

// Adding event listeners
document.addEventListener("DOMContentLoaded", function() {
  document.querySelector(".darkMode").addEventListener("click", darker);
  document.getElementById("b1").addEventListener("click", b1);
  document.getElementById("b2").addEventListener("click", b2);
  document.querySelector(".cookie").addEventListener("click", cookieClick);
});
body {
  background-color: rgb(0, 110, 255);
  font-family: "Ubuntu", sans-serif;
}

body,
.cookie {
  transition: background-color 0.5s ease;
}

.counter {
  background-color: rgb(55, 96, 185);
  font-family: "Ubuntu", sans-serif;
  border-radius: 10%;
  height: 100px;
  width: 300px;
  text-align: center;
  position: fixed;
  top: 10px;
  left: 40%;
}

.darkMode {
  background-color: gray;
  border-radius: 20%;
  height: 100px;
  width: 100px;
  text-align: center;
  position: fixed;
  top: 110px;
  left: 10px;
}

.cookie {
  background-color: brown;
  border-radius: 50%;
  height: 500px;
  /* Set a fixed height */
  width: 500px;
  /* Set the same width to make it a circle */
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  /* Center the element */
}

.buttonConcept,
#b1,
#b2,
#b3 {
  background-color: blue;
  color: aliceblue;
  height: 200px;
  border-radius: 10px;
  width: 300px;
}

#b1 {
  position: fixed;
  top: 10px;
  right: 10px;
}

#b2 {
  position: fixed;
  top: 210px;
  right: 10px;
}
<div class = "counter">Cookies: <span id = "cookieCount">0</span></div>
<div class = "darkMode" onclick = "darker()">Dark Mode Button:</div>
<div id = "b1" onclick = "b1()">(<span id = "inflationCase">20</span> cookies for) Grandmas: <span id = "grandma">0</span><span id = "noCookies"></span></div>
<div id = "b2" onclick = "b2()">Auto Clicks: <span id = "mouseclick">0</span></div>
<div class = "cookie" onclick = "cookieClick()"></div>

Я пытался уменьшить целое число, но оно дает 0. Я тоже пытался снизить обновление int, но все равно 0.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
69
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это происходит, когда вы используете переменную обновления, для которой изначально установлено значение 1. В функции cookieClick() строка num +=upgrade; увеличивает переменную num на значение обновления, которое изначально равно 1. Переменная num представляет общее количество файлов cookie и отображается в элементе span cookieCount с помощью функции checker().

Ответ принят как подходящий

Проблема вызвана тем, что к элементу cookie прикреплены как атрибут onClick, так и прослушиватель событий, в результате чего функция cookieClick() запускается дважды за клик (один раз onClick и снова прослушивателем событий). Удалите один из них и сохраните другой, если только вы не хотите, чтобы функция cookieClick запускалась дважды.

Например, в HTML удалите onClick и сохраните остальную часть кода как есть:

<div class = "cookie"></div>

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

Другие вопросы по теме