Почему моя форма выводит NaN?

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

Меня смущает то, что когда я делаю тип одной из переменных, присвоенных значению каждого ввода, он возвращает «число», и все же в результате я получаю NaN. Может ли кто-нибудь сказать мне, почему или что я делаю не так?

Вот мой HTML:

<form name = "baddiesCost">
     <input type = "number" placeholder = "Total Caught" name = "goomba" id = "goomba-form">
     <input type = "number" placeholder = "Total Caught" name = "bobombs" id = "bob-ombs-form">
     <input type = "number" placeholder = "Total Caught" name = "cheepCheeps" id = "cheep-form">
     <button id = "submitForm">Submit</button>
</form>
 <h1 id = "total"></h1>

Вот мой JavaScript:

document.baddiesCost.addEventListener("submit", function(e) {
  e.preventDefault();
  var goombaCaught = document.baddiesCost.goomba.value * goombaCost;
  var bobombsCaught = document.baddiesCost.bobombs.value * bobombsCost;
  var cheepsCaught = document.baddiesCost.cheepCheeps.value * cheepCost;
  var goombaCost = 5;
  var bobombsCost = 7;
  var cheepCost = 11;
  var showTotal = document.getElementById("total");
  var total = goombaCaught + bobombsCaught + cheepsCaught;
  showTotal.textContent = cheepsCaught;
  console.info(bobombsCaught);
  console.info(typeof bobombsCaught);
})
when I do a typeof of one of the variables assigned to the value of each input, it returns "number" это потому, что NaN действительно является числом.
VLAZ 25.04.2018 20:33

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

Patrick Evans 25.04.2018 20:34

Кроме того, вы вычисляете cheepsCaught путем умножения на переменную, которую вы определите позже.

VLAZ 25.04.2018 20:34

Вдобавок, когда вы выполняете document.baddiesCost.goomba.value, вы получаете нить. Чтобы преобразовать в число, сделайте Number(document.baddiesCost.goomba.value)

VLAZ 25.04.2018 20:35

Также не помешало бы обернуть места, где вы получаете входные значения, в parseInt() или parseFloat(), в зависимости от того, какой тип значения вы ожидаете.

dukedevil294 25.04.2018 20:35
Поведение ключевого слова "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) для оценки ваших знаний,...
1
5
203
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Этот оператор document.baddiesCost.bobombs.value * bobombsCost; использует переменную bobombsCost, которая в настоящее время не определена.

Итак, это похоже на: document.baddiesCost.bobombs.value * undefined;, который будет NaN.

Чтобы решить эту проблему, поместите инициализацию переменной перед использованием, как в следующем коде:

document.baddiesCost.addEventListener("submit", function(e) {
      e.preventDefault();

      var goombaCost = 5;
      var bobombsCost = 7;
      var cheepCost = 11;

      var goombaCaught = document.baddiesCost.goomba.value * goombaCost;
      var bobombsCaught = document.baddiesCost.bobombs.value * bobombsCost;
      var cheepsCaught = document.baddiesCost.cheepCheeps.value * cheepCost;

      var showTotal = document.getElementById("total");
      var total = goombaCaught + bobombsCaught + cheepsCaught;
      showTotal.textContent = cheepsCaught;
      console.info(bobombsCaught);
      console.info(typeof bobombsCaught);
    })

В любом случае, NaN - это числовой тип, вы можете обратиться к следующему Почта для получения дополнительных объяснений.

Вау, не могу поверить, что не видел этого. Это исправило это. Спасибо!

Christian Lopez 25.04.2018 20:48

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