为何doctorReport()函数在calculateBMI()函数内无法正常运行?
修复BMI应用中doctorReport函数的问题
你的代码存在几个关键问题,导致状态报告无法正常显示,下面逐一说明并给出修正后的完整代码:
问题分析
- 参数不匹配:调用
doctorReport(height, weight)时,函数定义却是doctorReport(resultElement),参数完全不对,导致函数内部拿不到正确的数据。 - 错误的DOM选择器:HTML里状态容器是
class="doctor"的div,但代码里用getElementById('doctor')找元素,这是找id为doctor的元素,自然找不到,应该用document.querySelector('.doctor')。 - 从DOM读取字符串进行数值比较:你试图从resultElement的innerHTML里取BMI值,但innerHTML是类似
"Your BMI is 22.34"的字符串,直接和数字比较会出错,应该直接用计算好的bmi数值。 - 条件判断逻辑错误:条件顺序不对,比如
else if (report > 18.5)会覆盖所有大于18.5的情况,后面的超重、肥胖条件永远不会触发,得按范围从低到高调整。 - 输入值未转数字:input的value是字符串类型,直接计算
weight / (height * height)可能导致意外结果,需要转成数字。
修正后的代码
HTML部分
<div class="box box1"><!--box1 starts--> <label for="height">Height (in meters):</label><br> <input type="number" id="height" class="bmi-input bmi-input1" placeholder="Enter your height in meters"> <br><br> <label for="weight">Weight (in kilograms):</label><br> <input type="number" id="weight" class="bmi-input bmi-input2" placeholder="Enter your weight in kilograms"> <br><br> <button onclick="calculateBMI()" class="bmi-button">Calculate BMI</button> <br><br> <div id="result" class="bmi-result">0.00</div> <span class="result-unit">kg/m<sup>2</sup></span> <div class="doctor"></div> </div><!--box1 ends-->
JavaScript部分
function calculateBMI() { // 把输入值转为数字,避免字符串计算问题 const height = Number(document.getElementById("height").value); const weight = Number(document.getElementById("weight").value); const bmi = weight / (height * height); const resultElement = document.getElementById("result"); errorNotice(bmi, resultElement); // 直接传入计算好的bmi数值 doctorReport(bmi); } // 提示未输入的用户 function errorNotice(bmi, resultElement) { if (isNaN(bmi) || height <=0 || weight <=0) { alert('请输入有效的身高和体重数值'); resultElement.innerHTML = '0.00'; document.querySelector('.doctor').innerHTML = ''; } else { resultElement.innerHTML = `Your BMI is ${bmi.toFixed(2)}`; } } function doctorReport(bmi) { let myReport = 'Status: '; // 按BMI标准范围调整条件顺序 if (bmi <= 18.5) { myReport += 'Underweight'; } else if (bmi > 18.5 && bmi <= 24.9) { myReport += 'Healthy Weight'; } else if (bmi > 24.9 && bmi <= 29.9) { myReport += 'Over Weight'; } else if (bmi >= 30.0) { myReport += 'Obesity'; } else { myReport += 'Too Obesed, go and see a doctor'; } // 用class选择器找到状态容器 document.querySelector('.doctor').innerHTML = myReport; }
内容的提问来源于stack exchange,提问作者Onwubiko Jedidiah Solomon
相关产品推荐
相关产品推荐

