BMI计算器在Javascript中显示结果

时间:2015-04-06 04:00:59

标签: javascript html5

所以我正在编写一个BMI计算器,并且显示用户的BMI运行良好,但是我很难获得javascript来显示其结果的含义。在用户输入他们的身高和体重并按 assessmentBMI 按钮后,会出现他们的数字BMI值,但是如何包含确定他们属于哪个范围的结论变量?其他一切都很好,除了将结果与数字输出联系起来。谢谢。

<script type="text/javascript"> function assessBMI() {
var heightInInches = document.getElementById("height").value;
var weightInPounds = document.getElementById("weight").value;
var calcBMI = Math.floor((weightInPounds * 703) / (heightInInches * heightInInches));
var conclusion;
document.getElementById("BMI").value = calcBMI;
document.getElementById("result").value = conclusion;

switch (calcBMI) {

       case (calcBMI < 18.5) :
           conclusion = 'You are underweight';
           break;
       case (calcBMI > 18.5) && (calcBMI < 24.9) :
           conclusion = 'You fall within the average range';
           break;
       case (calcBMI >= 25) && (calcBMI < 29.9) :
           conclusion = 'You are overweight';
           break;
       case (calcBMI > 30) :
           conclusion = 'You are obese';
           break;
 <input type="button" value="assessBMI" onclick="assessBMI();">

3 个答案:

答案 0 :(得分:1)

当您致电document.getElementById("result").value = conclusion;时,conclusion仍未定义。您必须在开关语句

之后设置值。

请注意,您在交换机块的末尾缺少一个结束括号,这可能会弄乱您的代码。应该最终看起来像这样:

switch (calcBMI) {
   // cases
}

document.getElementById("result").value = conclusion;

答案 1 :(得分:1)

如果您创建了一个单独的函数,它可以改进组织,该函数接受BMI输入并返回“结论”。所以assessBMI()可能最终会像这样:

function assessBMI() {
    var heightInInches = document.getElementById("height").value;
    var weightInPounds = document.getElementById("weight").value;
    var calcBMI = Math.floor((weightInPounds * 703) / (heightInInches * heightInInches));
    document.getElementById("BMI").value = calcBMI;

    document.getElementById("result").value = bmiConclusion(calcBMI);
}

然后你可以专注于搞清楚BMI范围。可能最简单的方法只是一系列if...else语句:

function bmiConclusion(bmi){
    if(bmi <= 18.5)
        return 'You are underweight';
    else if(bmi > 18.5 && bmi <= 24.9 )
        return 'You fall within the average range';
    else if(bmi > 24.9  && bmi <= 30)
        return 'You are overweight';
    else if(bmi > 30)
        return 'You are obese';
    else
        return '';
}

您可以使用switch语句,但我认为这不会使代码更具可读性或可管理性:

function bmiConclusion(bmi){
    switch (true) {
        case (bmi <= 18.5) :
            return 'You are underweight';
        case (bmi > 18.5) && (bmi <= 24.9 ) :
            return 'You fall within the average range';
        case (bmi > 24.9 ) && (bmi <= 30) :
            return 'You are overweight';
        case (bmi > 30) :
            return 'You are obese';
        default:
            return '';
    }
}

它实际上使代码更长,加上你最终得到奇怪的switch (true)语句。

答案 2 :(得分:0)

使用此代码;我修好了这些洞,并将document.getElementById("result").value = conclusion;移到了最后。我希望这就是你所需要的。

function assessBMI() {
    var heightInInches = document.getElementById("height").value;
    var weightInPounds = document.getElementById("weight").value;
    var calcBMI = Math.floor((weightInPounds * 703) / (heightInInches * heightInInches));
    var conclusion;
    document.getElementById("BMI").value = calcBMI;

    switch (calcBMI) {

       case (calcBMI < 18.5) :
           conclusion = 'You are underweight';
           break;
       case (calcBMI >= 18.5) && (calcBMI < 25) :
           conclusion = 'You fall within the average range';
           break;
       case (calcBMI >= 25) && (calcBMI < 30) :
           conclusion = 'You are overweight';
           break;
       case (calcBMI >= 30) :
           conclusion = 'You are obese';
           break;
    }

    document.getElementById("result").value = conclusion;

}