我正在创建一个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元素中显示不同的文本,但这不会发生。有人可以向我解释有什么不对,可能会为我提供更好的做法吗?
答案 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
您应该将所有三个答案放在一起以获得正确的代码。