Javascript:许多条件但行动不同

时间:2014-10-11 01:52:39

标签: javascript

我正在创建一个BMI计算器。

到目前为止,这是我的代码:

var $ = function(id) {
    return document.getElementById(id);
}
var calculateBmi = function() {
var weight = parseInt($("weight").value);
var height = parseInt($("height").value);

    if (weight > 0 && height > 0 && weight !=isNaN && height !=isNaN){
    var bmi = Math.floor((weight / (height * height)) * 703);
    $("bmi_message").innerHTML = "" + bmi;
}

    if (bmi > 18.5) {
        $("bmi_message").innerHTML = ": Underweight";
        }
    else if (bmi >= 18.5 && bmi <= 24.9) {
        $("bmi_message").innerHTML = ": Normal";
        }
    else if (bmi >= 25 && bmi <= 29) {
        $("bmi_message").innerHTML = ": Overweight";
        }
    else if (bmi > 30) {
        $("bmi_message").innerHTML = ": Obese";
    }
    else if (isNaN(weight)) {
        $("weight_message").innerHTML = "Enter numerical weight value (lbs)";
    }
    else if (isNaN(height)) {
        $("height_message").innerHTML = "Enter numerical height value (kg)";
    }
    }
    window.onload = function () {
        $("calculateBmi").onclick = calculateBmi;
}

我有所有这些条件(bmi&gt; x OR bmi&lt; x)需要不同的动作。每个范围都应该导致我的span元素中显示不同的文本,但这不会发生。有人可以向我解释有什么不对,可能会为我提供更好的做法吗?

2 个答案:

答案 0 :(得分:0)

在您的代码中

if (bmi > 18.5) {
    $("bmi_message").innerHTML = ": Underweight";
    }
对于任何高于18.5的值,

总是为真,所以你不会得到任何其他值,但总是低于。

尝试

if (bmi < 18.5) {
    $("bmi_message").innerHTML = ": Underweight";
    }

答案 1 :(得分:0)

这仅指出代码中的第三个特定问题。您正在检查重量(和高度)是否为weight != isNaN的数字,但是:

100 != isNaN // --> true
'text' != isNaN // --> true

isNaN不是静态值,而是function可以使用,如下所示:

var weight = 100; isNaN(weight) // -->false
                  !isNaN(weight) // --> true

var height = 'text'; isNaN(height) // --> true
                     !isNaN(height) // --> false

您应该将所有三个答案放在一起以获得正确的代码。