2015-10-21 38 views
0

我用Javascript创建了这个简单的应用程序,但我不断收到一个错误,说“Uncaught TypeError: Cannot read property 'value' of null”,这发生在行“var age = document.getElementById("age").value;”我一直在寻找问题的每个地方,但我只是没有看到它。请查看我的代码并帮助我。谢谢!JavaScript空值错误

<script> 
     function calculateBMR() 
    { 
     var gender = document.getElementById("gender").value; 
     var age = document.getElementById("age").value; 
     var weigth = document.getElementById("weight").value; 
     var heigth = document.getElementById("height").value; 
     console.log(gender); 
     if (gender == "male") 
     { 
      var result = 66 + (6.23 * weight) + (12.7 * height) - (6.8 *age); 

     } 
     else if (gender == "female") 
     { 
      var result = 655 + (4.35 * weight) + (4.7 * height) - (4.7 * age); 
     } 
     document.bmrForm.bmr.value = result; 
    }; 
    </script> 
    <form name = "bmrForm"> 
     Gender: 
      <br /> 
     <select id="gender"> 
     <option value="male">male</option> 
     <option value="female">female</option> 
     </select> 
      <br /> 
     Age: 
      <br /> 
     <input type = "text" name ="age" size = "10"> 
      <br /> 
     Weigth (lb.) : 
      <br /> 
     <input type = "text" name ="weight" size = "10"> 
      <br /> 
     Heigth (inches) : 
      <br /> 
     <input type = "text" name = "height" size = "10"> 
      <br /> 
      <br /> 
     <input type = "button" value = "Calculate BMR" onClick = "calculateBMR();"> 
      <br /> 
      <br /> 
      BMR: 
      <br /> 
     <input type = "text" name = "bmr"> 
    </form> 
+1

ID不是网页上找到'age','weight','height' – Tushar

回答

0

你要找的人ID为ageheightweight元素,同时也有与这些ID没有HTML元素。

尝试使用它们像这样:

<input type = "text" name ="age" size = "10" id="age"> 
<input type = "text" name ="weight" size = "10" id="weight"> 
<input type = "text" name ="height" size = "10" id="height"> 

编辑:
你不应该使用document.getElementById(...).value直接,因为它可能不确定的,取决于它的使用的HTML。另外,如果用户输入一个非数字值,则保证会有某种无效结果(例外,错误计算等)。

因此,应该相应地改变你的JavaScript:

var ageElement = document.getElementById('age'); 

if (ageElement != undefined) 
    age = Number(ageElement.value); 

if (Number.isNaN(age)) 
    // Do your calculations. 
+0

我很困惑为什么会接受的答案,因为它未能识别拼写错误(“高度”与“heigth”),这会导致程序无法工作,也没有指出你不能直接用'.value'的结果进行数值运算(因为它是一个字符串)。 –

+0

@torazaburo感谢您纠正我的答案。但是,Mike只在字符串上使用'*',这很好,只要用户输入是有效的数字即可。 我将相应地编辑我的答案 –