Создание макро калькулятора - получение результата NaN при попытке добавить выпадающее меню - PullRequest
0 голосов
/ 14 июля 2020

Калькулятор работал нормально, пока я не добавил уровень активности из раскрывающегося списка. В зависимости от выбора пользователем уровня активности возвращаемое значение следует умножить на соответствующее значение, связанное с каждым уровнем активности. Я добавил значения, на которые он должен умножать результат. Однако, похоже, он не видит внутри функции переменную activityLevel. Я неправильно это объявляю? Когда я пытаюсь запустить код, он возвращает результат NaN.

/* Calculate female macros */
(function() {
  function calculateFemale(femaleWeight, femaleHeight, femaleAge) {
    femaleWeight = parseFloat(femaleWeight);
    femaleHeight = parseFloat(femaleHeight);
    femaleAge = parseFloat(femaleAge);
    activityLevel = (activityLevel);
    return (((femaleWeight * 4.3) + (femaleHeight * 4.7) - (femaleAge * 4.7)  * activityLevel);
  }

  var womanBMR = document.getElementById("womanBMR");
  if (womanBMR) {
    womanBMR.onsubmit = function() {
      this.result.value = calculateFemale(this.femaleWeight.value, this.femaleHeight.value, this.femaleAge.value, this.activityLevel.value);
      return false;
    };
  }
}());


/* Calculate male macros */
(function() {
  function calculateMale(maleWeight, maleHeight, maleAge) {
    maleWeight = parseFloat(maleWeight);
    maleHeight = parseFloat(maleHeight);
    maleAge = parseFloat(maleAge);
    activityLevel = (activityLevel);
    return (((maleWeight * 6.3) + (maleHeight * 12.9) - (maleAge * 6.8) + 66) * activityLevel);
  }

  var maleBMR = document.getElementById("manBMR");
  if (manBMR) {
    manBMR.onsubmit = function() {
      this.result.value = calculateMale(this.maleWeight.value, this.maleHeight.value, this.maleAge.value, this.activityLevel.value);
      return false;
    };
  }
}());
* {
  box-sizing: border-box;
}
img {
  max-width: 100%;
}
.w-button {
  display: inline-block;
  padding: 9px 15px;
  background-color: #3898EC;
  color: white;
  border: 0;
  border-radius: 0;
}
p {
  margin-top: 0;
  margin-bottom: 10px;
}
.w-container {
  margin-left: auto;
  margin-right: auto;
  max-width: 940px;
}
.w-row:before,
.w-row:after {
  content: " ";
  display: table;
}
.w-row:after {
  clear: both;
}
.w-col {
  position: relative;
  float: left;
  width: 100%;
  min-height: 1px;
  padding-left: 10px;
  padding-right: 10px;
}
.w-col .w-col {
  padding-left: 0;
  padding-right: 0;
}
.w-col-1 {
  width: 8.33333333%;
}
.w-col-2 {
  width: 91.66666667%;
}
body {
  margin: 0;
  background-color: #fff;
  font-family: Arial, sans-serif;
  font-size: 14px;
  line-height: 20px;
  color: #333;
}
h1 {
  font-size: 38px;
  line-height: 44px;
  margin-top: 20px;
}
h2 {
  margin-top: 20px;
  margin-bottom: 10px;
  color: #f70909;
  font-size: 32px;
  line-height: 36px;
  font-weight: 400;
}
.text-block {
  position: relative;
  left: 100px;
}
.text-block-3 {
  margin-top: 20px;
  padding-left: 100px;
}
.text-block-4 {
  padding-top: 20px;
  padding-left: 20px;
}
.list {
  padding-left: 140px;
}
.div-block {
  font-style: italic;
  font-weight: 400;
}
.paragraph {
  padding-top: 20px;
}
.container {
  margin-top: 0px;
}
.button {
  margin-top: 20px;
  margin-left: 100px;
  background-color: #020202;
}
.column-1 {
  background-color: #f0e8e8;
}
.image {
  padding-left: 20px;
}
<!DOCTYPE html>
<head>
<title>Calculator</title>
  <link href="css/style.css" rel="stylesheet" type="text/css">
</head>
<body>
  <div class="w-row">
  <div class="w-col w-col-1"><img src="images/apple.jpg" alt="apple"></div>
  <div class="column-1 w-col w-col-2">
    <h1>Healthy Eating</h1>
  </div>
</div>
<div class="w-container">
  <h2>Calculator</h2>
</div>

<div class="w-container">
<div><em>Use the form below if you are female.</em></div>
  <form id="womanBMR">
    <fieldset>

      <p>
        <label for="femaleWeight">Weight (lbs)</label>
        <input id="femaleWeight" name="femaleWeight" type="number" />
      </p>
      <p>
        <label for="femaleHeight">Height (inches)</label>
        <input id="femaleHeight" name="femaleHeight" type="number" />
      </p>
      <p>
        <label for="femaleAge">Ages (years)</label>
        <input id="femaleAge" name="femaleAge" type="number" />
      </p>
      <p>
    <select id = "selActivity">
      <option value = "1.2">Sedentary</option>
      <option value = "1.375">Light Activity</option>
      <option value = "1.55">Moderate Activity</option>
      <option value = "1.725">Very Active</option>
      <option value = "1.9">Extra Active</option>
        </select>
      </p>
      <p>
        <input type="submit" value="Calculate" />
      </p>
      <p>
        <label for="result">Base Calories Per Day</label>
        <input id="result" name="result" />
      </p>
      <p>
        <input type="reset" value="Clear" />
      </p>
    </fieldset>
  </form>
</div>

<div class="w-container">
<div><em>Use the form below if you are male.</em></div>
  <form id="manBMR">
    <fieldset>

      <p>
        <label for="maleWeight">Weight (lbs)</label>
        <input id="maleWeight" name="maleWeight" type="number" />
      </p>
      <p>
        <label for="maleHeight">Height (inches)</label>
        <input id="maleHeight" name="maleHeight" type="number" />
      </p>
      <p>
        <label for="maleAge">Ages (years)</label>
        <input id="maleAge" name="maleAge" type="number" />
      </p>
      <p>
    <select id = "activityLevel">
      <option value = "1.2">Sedentary</option>
      <option value = "1.375">Light Activity</option>
      <option value = "1.55">Moderate Activity</option>
      <option value = "1.725">Very Active</option>
      <option value = "1.9">Extra Active</option>
        </select>
      </p>      
      <p>
        <input type="submit" value="Calculate" />
      </p>
      <p>
        <label for="result">Base Calories Per Day</label>
        <input id="result" name="result" />
      </p>
      <p>
        <input type="reset" value="Clear" />
      </p>
    </fieldset>
  </form>
</div>
<script src="js/calculatorscript.js"></script>
<a href="home.html" class="button w-button">Home</a><a href="recipes.html" class="button w-button">Recipes</a><a href="recipes.html" class="button w-button">Tips</a><a href="faq.html" class="button w-button">FAQ</a>
</body>
</html>

1 Ответ

0 голосов
/ 14 июля 2020

Вы забыли добавить параметр в определение функции и вызвать parseFloat

/* Calculate female macros */
(function() {
  function calculateFemale(femaleWeight, femaleHeight, femaleAge) {
    femaleWeight = parseFloat(femaleWeight);
    femaleHeight = parseFloat(femaleHeight);
    femaleAge = parseFloat(femaleAge);
    return ((femaleWeight * 4.3) + (femaleHeight * 4.7) - (femaleAge * 4.7)  + 655);
  }

  var womanBMR = document.getElementById("womanBMR");
  if (womanBMR) {
    womanBMR.onsubmit = function() {
      this.result.value = calculateFemale(this.femaleWeight.value, this.femaleHeight.value, this.femaleAge.value);
      return false;
    };
  }
}());


/* Calculate male macros */
//*This function calculates the macros for a male, it requires three variables be input
//*by the user. Their weight, height, and age. It then returns the 
(function() {
  function calculateMale(maleWeight, maleHeight, maleAge, activityLevel) {
    maleWeight = parseFloat(maleWeight);
    maleHeight = parseFloat(maleHeight);
    maleAge = parseFloat(maleAge);
    activityLevel = parseFloat(activityLevel);
    return (((maleWeight * 6.3) + (maleHeight * 12.9) - (maleAge * 6.8) + 66) * activityLevel);
  }

  var maleBMR = document.getElementById("manBMR");
  if (manBMR) {
    manBMR.onsubmit = function() {
      this.result.value = calculateMale(this.maleWeight.value, this.maleHeight.value, this.maleAge.value, this.activityLevel.value);
      return false;
    };
  }
}());
* {
  box-sizing: border-box;
}
img {
  max-width: 100%;
}
.w-button {
  display: inline-block;
  padding: 9px 15px;
  background-color: #3898EC;
  color: white;
  border: 0;
  border-radius: 0;
}
p {
  margin-top: 0;
  margin-bottom: 10px;
}
.w-container {
  margin-left: auto;
  margin-right: auto;
  max-width: 940px;
}
.w-row:before,
.w-row:after {
  content: " ";
  display: table;
}
.w-row:after {
  clear: both;
}
.w-col {
  position: relative;
  float: left;
  width: 100%;
  min-height: 1px;
  padding-left: 10px;
  padding-right: 10px;
}
.w-col .w-col {
  padding-left: 0;
  padding-right: 0;
}
.w-col-1 {
  width: 8.33333333%;
}
.w-col-2 {
  width: 91.66666667%;
}
body {
  margin: 0;
  background-color: #fff;
  font-family: Arial, sans-serif;
  font-size: 14px;
  line-height: 20px;
  color: #333;
}
h1 {
  font-size: 38px;
  line-height: 44px;
  margin-top: 20px;
}
h2 {
  margin-top: 20px;
  margin-bottom: 10px;
  color: #f70909;
  font-size: 32px;
  line-height: 36px;
  font-weight: 400;
}
.text-block {
  position: relative;
  left: 100px;
}
.text-block-3 {
  margin-top: 20px;
  padding-left: 100px;
}
.text-block-4 {
  padding-top: 20px;
  padding-left: 20px;
}
.list {
  padding-left: 140px;
}
.div-block {
  font-style: italic;
  font-weight: 400;
}
.paragraph {
  padding-top: 20px;
}
.container {
  margin-top: 0px;
}
.button {
  margin-top: 20px;
  margin-left: 100px;
  background-color: #020202;
}
.column-1 {
  background-color: #f0e8e8;
}
.image {
  padding-left: 20px;
}
<!DOCTYPE html>
<head>
<title>Calculator</title>
  <link href="css/style.css" rel="stylesheet" type="text/css">
</head>
<body>
  <div class="w-row">
  <div class="w-col w-col-1"><img src="images/apple.jpg" alt="apple"></div>
  <div class="column-1 w-col w-col-2">
    <h1>Healthy Eating</h1>
  </div>
</div>
<div class="w-container">
  <h2>Calculator</h2>
</div>

<div class="w-container">
<div><em>Use the form below if you are female.</em></div>
  <form id="womanBMR">
    <fieldset>

      <p>
        <label for="femaleWeight">Weight (lbs)</label>
        <input id="femaleWeight" name="femaleWeight" type="number" />
      </p>
      <p>
        <label for="femaleHeight">Height (inches)</label>
        <input id="femaleHeight" name="femaleHeight" type="number" />
      </p>
      <p>
        <label for="femaleAge">Ages (years)</label>
        <input id="femaleAge" name="femaleAge" type="number" />
      </p>
      <p>
    <select id = "selActivity">
      <option value = "1.2">Sedentary</option>
      <option value = "1.375">Light Activity</option>
      <option value = "1.55">Moderate Activity</option>
      <option value = "1.725">Very Active</option>
      <option value = "1.9">Extra Active</option>
        </select>
      </p>
      <p>
        <input type="submit" value="Calculate" />
      </p>
      <p>
        <label for="result">Base Calories Per Day</label>
        <input id="result" name="result" />
      </p>
      <p>
        <input type="reset" value="Clear" />
      </p>
    </fieldset>
  </form>
</div>

<div class="w-container">
<div><em>Use the form below if you are male.</em></div>
  <form id="manBMR">
    <fieldset>

      <p>
        <label for="maleWeight">Weight (lbs)</label>
        <input id="maleWeight" name="maleWeight" type="number" />
      </p>
      <p>
        <label for="maleHeight">Height (inches)</label>
        <input id="maleHeight" name="maleHeight" type="number" />
      </p>
      <p>
        <label for="maleAge">Ages (years)</label>
        <input id="maleAge" name="maleAge" type="number" />
      </p>
      <p>
    <select id = "activityLevel">
      <option value = "1.2">Sedentary</option>
      <option value = "1.375">Light Activity</option>
      <option value = "1.55">Moderate Activity</option>
      <option value = "1.725">Very Active</option>
      <option value = "1.9">Extra Active</option>
        </select>
      </p>      
      <p>
        <input type="submit" value="Calculate" />
      </p>
      <p>
        <label for="result">Base Calories Per Day</label>
        <input id="result" name="result" />
      </p>
      <p>
        <input type="reset" value="Clear" />
      </p>
    </fieldset>
  </form>
</div>
<script src="js/calculatorscript.js"></script>
<a href="home.html" class="button w-button">Home</a><a href="recipes.html" class="button w-button">Recipes</a><a href="recipes.html" class="button w-button">Tips</a><a href="faq.html" class="button w-button">FAQ</a>
</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...