Не попадаю в блок else if [закрыт]

113
26 мая 2021, 22:30
Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском.

Закрыт 1 год назад.

Улучшить вопрос

Решил написать свой простенький калькулятор калорий использую необходимые формулы. Однако столкнулся с такой проблемой, что скрипт работает только, если выбран пункт Низкая активность. То есть, если выбираю средняя или высокая, то он выдает одно и тоже значение.

Пришел к выводу, что программа просто не попадает в конструкцию else if, не могу понять почему.

Результат в консоли, если что:)

Скрипт

function caloryCalc(){ 
    // НЕ ЗАБЫТЬ ОПТИМИЗИРОВАТЬ!!!!! 
 
    let weight = document.querySelector('#weight').value; 
    let growth = document.querySelector('#growth').value; 
    let age = document.querySelector('#age').value; 
 
    // Формула Base metabolic rate -bmr 
    weight = parseInt(weight); 
    growth = parseInt(growth); 
    age = parseInt(age); 
 
    bmr = 88.36 + (13.4 * weight) + (4.8 * growth) - (5.7 * age); 
 
    let activity = document.getElementById('activity'); 
    let goals = document.getElementById('goal'); 
     
    if (activity.selectedIndex == 1) { 
        bmr *= 1.375;   // low activity 
 
        if (goals.selectedIndex == 1) { 
            bmr = bmr - (bmr / 100) * 20; 
        } 
        else if (goals.selectedIndex == 2) { 
            bmr = bmr; 
        } 
        else if (goals.selectedIndex == 3) { 
            bmr = bmr + (bmr / 100) * 20; 
        } 
 
    else if (activity.selectedIndex == 2) { 
        bmr *= 1.55;    // middle activity 
        if (goals.selectedIndex == 1) { 
            bmr = bmr - (bmr / 100) * 20; 
        } 
        else if (goals.selectedIndex == 2) { 
            bmr = bmr; 
        } 
        else if (goals.selectedIndex == 3) { 
            bmr = bmr + (bmr / 100) * 20; 
        } 
    } 
    else if (activity.selectedIndex == 3) { 
        bmr *= 1.725; 
        if (goals.selectedIndex == 1) { 
            bmr = bmr - (bmr / 100) * 20; 
        } 
        else if (goals.selectedIndex == 2) { 
            bmr = bmr; 
        } 
        else if (goals.selectedIndex == 3) { 
            bmr = bmr + (bmr / 100) * 20; 
        } 
    } 
 } 
    console.log(bmr); 
    return false; 
} 
 
let btn = document.querySelector('.btn'); 
btn.onclick = caloryCalc;
body { 
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; 
    margin-top: 300px; 
    text-align: center; 
    font-weight: 300; 
    font-size: 24px; 
    color: #ffffff; 
    background-image: linear-gradient(-122deg, rgb(100, 0, 190), rgb(190, 0, 160), rgb(225, 0, 55)); 
    background-repeat: no-repeat; 
    height: 680px; 
} 
h1 { 
    text-align: center; 
} 
input:focus { 
    background: #eaeaea; 
} 
form { 
    width: 340px; 
    margin: 0 auto; 
} 
.field { 
    clear: both; 
    text-align: right; 
} 
label { 
    float: left; 
    padding-right: 10px; 
} 
#out { 
    font-weight: 300; 
    font-size: 40px; 
} 
.btn { 
    margin-top: 15px; 
    cursor: pointer; 
    border: 1px solid #ffffff; 
    width: 90px; 
    background: #fff; 
    padding: 5px; 
    font-weight: 600; 
}
<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <meta http-equiv="X-UA-Compatible" content="ie=edge"> 
    <title>Document</title> 
    <link rel="stylesheet" href="./css/style.css"> 
</head> 
<body> 
    <div class="form-wrap"> 
            <div class="profile"> 
                <h1>Расчет калорий</h1> 
            </div> 
        <form action=""> 
     
        <fieldset> 
            <legend>Физические данные:</legend> 
            <div class="field"><label for="weight">Веc: </label> 
                    <input type="text" id="weight" required placeholder="Ваш вес, кг" autofocus> 
            </div> 
            <div class="field"><label for="growth">Рост: </label> 
                    <input type="text" id="growth" required placeholder="Ваш рост, см"> 
            </div> 
            <div class="field"><label for="age">Возраст: </label> 
                <input type="text" id="age" required placeholder="Ваш возраст, лет"> 
            </div> 
 
         
<!-- Физическая активность --> 
 
        <select name="activity" id="activity"> 
            <option value="Выберите активность">Выберите активность</option> 
            <option value="Низкая">Низкая</option> 
            <option value="Средняя">Средняя</option> 
            <option value="Высокая">Высокая</option> 
        </select> 
 
<!-- Цели --> 
 
        <select name="goal" id="goal"> 
            <option value="Выберите цель">Выберите цель</option> 
            <option value="Похудение">Похудение</option> 
            <option value="Поддержание">Поддержание</option> 
            <option value="Набор">Набор</option> 
        </select> 
    </fieldset> 
        <input type="submit" class="btn" value="Расчитать"> 
    </form> 
 
    <p id="out">Результат: </p> 
</div> 
    <script src="./js/script.js"></script> 
</body> 
</html>

Answer 1

На 30 строке пропустили } (перед else if (activity.selectedIndex == 2) ), и при этом было одно лишние закрытие ниже по коду, почти в конце функции (перед console.log(bmr); ).

function caloryCalc(){ 
    // НЕ ЗАБЫТЬ ОПТИМИЗИРОВАТЬ!!!!! 
 
    let weight = document.querySelector('#weight').value; 
    let growth = document.querySelector('#growth').value; 
    let age = document.querySelector('#age').value; 
 
    // Формула Base metabolic rate -bmr 
    weight = parseInt(weight); 
    growth = parseInt(growth); 
    age = parseInt(age); 
 
    bmr = 88.36 + (13.4 * weight) + (4.8 * growth) - (5.7 * age); 
 
    let activity = document.getElementById('activity'); 
    let goals = document.getElementById('goal'); 
     
    if (activity.selectedIndex == 1) { 
        bmr *= 1.375;   // low activity 
 
        if (goals.selectedIndex == 1) { 
            bmr = bmr - (bmr / 100) * 20; 
        } else if (goals.selectedIndex == 2) { 
            bmr = bmr; 
        } else if (goals.selectedIndex == 3) { 
            bmr = bmr + (bmr / 100) * 20; 
        } 
    } else if (activity.selectedIndex == 2) { 
        bmr *= 1.55;    // middle activity 
         
        if (goals.selectedIndex == 1) { 
            bmr = bmr - (bmr / 100) * 20; 
        } else if  (goals.selectedIndex == 2) { 
            bmr = bmr; 
        } else if  (goals.selectedIndex == 3) { 
            bmr = bmr + (bmr / 100) * 20; 
        } 
    } else if  (activity.selectedIndex == 3) { 
        bmr *= 1.725; 
        if (goals.selectedIndex == 1) { 
            bmr = bmr - (bmr / 100) * 20; 
        } else if  (goals.selectedIndex == 2) { 
            bmr = bmr; 
        } else if  (goals.selectedIndex == 3) { 
            bmr = bmr + (bmr / 100) * 20; 
        } 
    } 
  
    console.log(bmr); 
    return false 
} 
 
let btn = document.querySelector('.btn'); 
btn.onclick = caloryCalc;
body { 
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; 
    margin-top: 300px; 
    text-align: center; 
    font-weight: 300; 
    font-size: 24px; 
    color: #ffffff; 
    background-image: linear-gradient(-122deg, rgb(100, 0, 190), rgb(190, 0, 160), rgb(225, 0, 55)); 
    background-repeat: no-repeat; 
    height: 680px; 
} 
h1 { 
    text-align: center; 
} 
input:focus { 
    background: #eaeaea; 
} 
form { 
    width: 340px; 
    margin: 0 auto; 
} 
.field { 
    clear: both; 
    text-align: right; 
} 
label { 
    float: left; 
    padding-right: 10px; 
} 
#out { 
    font-weight: 300; 
    font-size: 40px; 
} 
.btn { 
    margin-top: 15px; 
    cursor: pointer; 
    border: 1px solid #ffffff; 
    width: 90px; 
    background: #fff; 
    padding: 5px; 
    font-weight: 600; 
}
<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <meta http-equiv="X-UA-Compatible" content="ie=edge"> 
    <title>Document</title> 
    <link rel="stylesheet" href="./css/style.css"> 
</head> 
<body> 
    <div class="form-wrap"> 
            <div class="profile"> 
                <h1>Расчет калорий</h1> 
            </div> 
        <form action=""> 
     
        <fieldset> 
            <legend>Физические данные:</legend> 
            <div class="field"><label for="weight">Веc: </label> 
                    <input type="text" id="weight" required placeholder="Ваш вес, кг" autofocus> 
            </div> 
            <div class="field"><label for="growth">Рост: </label> 
                    <input type="text" id="growth" required placeholder="Ваш рост, см"> 
            </div> 
            <div class="field"><label for="age">Возраст: </label> 
                <input type="text" id="age" required placeholder="Ваш возраст, лет"> 
            </div> 
 
         
<!-- Физическая активность --> 
 
        <select name="activity" id="activity"> 
            <option value="Выберите активность">Выберите активность</option> 
            <option value="Низкая">Низкая</option> 
            <option value="Средняя">Средняя</option> 
            <option value="Высокая">Высокая</option> 
        </select> 
 
<!-- Цели --> 
 
        <select name="goal" id="goal"> 
            <option value="Выберите цель">Выберите цель</option> 
            <option value="Похудение">Похудение</option> 
            <option value="Поддержание">Поддержание</option> 
            <option value="Набор">Набор</option> 
        </select> 
    </fieldset> 
        <input type="submit" class="btn" value="Расчитать"> 
    </form> 
 
    <p id="out">Результат: </p> 
</div> 
    <script src="./js/script.js"></script> 
</body> 
</html>

READ ALSO
Как узнать в какую сторону отсортируется массив функцией sort(fn)

Как узнать в какую сторону отсортируется массив функцией sort(fn)

Есть функция sort(fn)Как не проверяя результат, узнать в какую сторону сортируется массив (увеличение или уменьшение)?

143
Jquery UI draggable stop: поймать элемент который находится под тем,который перетягивают

Jquery UI draggable stop: поймать элемент который находится под тем,который перетягивают

Собственно говоря, вопрос в заголовкеЧто я хочу сделать, но не знаю как: при срабатывании event stop получить элемент, над которым отпустили блок,...

111
Как произвольно разбить &lt;ul&gt; на columns?

Как произвольно разбить <ul> на columns?

Всем привет! Обычным способом можно разбить "ul" на columns, прописав в стилях списка "columns: 3"Он сделает 3 колонки, по 2 "li" в каждой

116
Модульные css и глобальные классы

Модульные css и глобальные классы

Как переопределить в module scss глобальный класс officeUI fabric?

132