Javascript NaN,当运行体重指数计算器时

Javascript NaN,当运行体重指数计算器时,javascript,html,Javascript,Html,我做错了什么?根据教科书上的例子,这应该是足够的代码,但我在浏览器中运行它时得到NaN <!DOCTYPE html> <html lang="en"> <meta charset="utf-8"/> <html> <head> <title>test</title> </head> <body> <

我做错了什么?根据教科书上的例子,这应该是足够的代码,但我在浏览器中运行它时得到NaN

<!DOCTYPE html>
    <html lang="en"> 
    <meta charset="utf-8"/>
    <html>
      <head>
        <title>test</title>
      </head>
    <body>

    <p>Vekt: <input type="text" id="txtVekt" /></p>
    <p>Hoyde: <input type="text" id="txtHoyde" /></p>
      <button id="btnBeregn">Beregn</button>
      <p id="resultat"></p>

      <script>
    window.onload = beregn();


      function beregn(){
        var hoyde = document.getElementById("txtHoyde").value;
        var vekt = document.getElementById("txtVekt").value;

        var bmi = vekt / (hoyde * vekt);

        document.getElementById("resultat").innerHTML = "Din BMI er: " + bmi;
      }

    </script>

      </body>
    </html>

测试
Vekt:

霍德:

贝雷恩

window.onload=beregn(); 函数beregn(){ var hoyde=document.getElementById(“txtHoyde”).value; var vekt=document.getElementById(“txtVekt”).value; var bmi=vekt/(hoyde*vekt); document.getElementById(“resultat”).innerHTML=“Din BMI er:”+BMI; }
hoyde
vekt
在页面加载时没有任何值,因为输入是空的,所以没有理由
bmi
应该为您提供除
NaN
之外的任何内容

您需要为这些输入提供一个默认值(开始时可能为1),然后在单击按钮时重新运行
begregn
函数:

 <p>Vekt: <input type="text" id="txtVekt" value=1/></p>
 <p>Hoyde: <input type="text" id="txtHoyde" value=1/></p>
 <button id="btnBeregn" onclick="begregn()">Beregn</button>
Vekt:

霍德:

贝雷恩

或者不要在窗口加载时运行
begregn
,而只在单击按钮时运行
hoyde
,并且
vekt
在页面加载时没有任何值,因为输入是空的,所以没有理由
bmi
应该为您提供除
NaN
之外的任何内容

您需要为这些输入提供一个默认值(开始时可能为1),然后在单击按钮时重新运行
begregn
函数:

 <p>Vekt: <input type="text" id="txtVekt" value=1/></p>
 <p>Hoyde: <input type="text" id="txtHoyde" value=1/></p>
 <button id="btnBeregn" onclick="begregn()">Beregn</button>
Vekt:

霍德:

贝雷恩

或者只是不要在窗口加载时运行
begregn
,而只在单击按钮时运行。。。窗口加载时。:)

更改
window.onload=beregn()至:


var btn=document.getElementById(“btnBeregn”);
btn.addEventListener(“单击”,删除);

window.onload运行。。。窗口加载时。:)

更改
window.onload=beregn()至:


var btn=document.getElementById(“btnBeregn”);
btn.addEventListener(“单击”,删除);

  • 首次运行函数时,您的值未初始化
  • 实际上不需要运行函数
    onload
    ,尤其是 因为您的值没有初始化。请注意,我的代码删除了
    onload
    调用
  • 单击按钮时,您可以运行计算。您可能还想在运行函数之前添加一些验证,但我将把这个练习留给您

      <body>
     <p>Vekt: <input type="text" id="txtVekt" /></p>
        <p>Hoyde: <input type="text" id="txtHoyde" /></p>
          <button id="btnBeregn" onclick="beregn();" >Beregn</button>
          <p id="resultat"></p>
    
          <script>
          function beregn(){
            var hoyde = document.getElementById("txtHoyde").value;
            var vekt = document.getElementById("txtVekt").value;
    
            //this assumes your inputs are valid numbers...
            var bmi = vekt / (hoyde * vekt);
    
            document.getElementById("resultat").innerHTML = "Din BMI er: " + bmi;
          }
    
        </script>
    
       </body>
    
    
    Vekt:

    霍德:

    贝雷恩

    函数beregn(){ var hoyde=document.getElementById(“txtHoyde”).value; var vekt=document.getElementById(“txtVekt”).value; //这假设您的输入是有效的数字。。。 var bmi=vekt/(hoyde*vekt); document.getElementById(“resultat”).innerHTML=“Din BMI er:”+BMI; }
  • 首次运行函数时,您的值未初始化
  • 实际上不需要运行函数
    onload
    ,尤其是 因为您的值没有初始化。请注意,我的代码删除了
    onload
    调用
  • 单击按钮时,您可以运行计算。您可能还想在运行函数之前添加一些验证,但我将把这个练习留给您

      <body>
     <p>Vekt: <input type="text" id="txtVekt" /></p>
        <p>Hoyde: <input type="text" id="txtHoyde" /></p>
          <button id="btnBeregn" onclick="beregn();" >Beregn</button>
          <p id="resultat"></p>
    
          <script>
          function beregn(){
            var hoyde = document.getElementById("txtHoyde").value;
            var vekt = document.getElementById("txtVekt").value;
    
            //this assumes your inputs are valid numbers...
            var bmi = vekt / (hoyde * vekt);
    
            document.getElementById("resultat").innerHTML = "Din BMI er: " + bmi;
          }
    
        </script>
    
       </body>
    
    
    Vekt:

    霍德:

    贝雷恩

    函数beregn(){ var hoyde=document.getElementById(“txtHoyde”).value; var vekt=document.getElementById(“txtVekt”).value; //这假设您的输入是有效的数字。。。 var bmi=vekt/(hoyde*vekt); document.getElementById(“resultat”).innerHTML=“Din BMI er:”+BMI; }
    document.getElementById(“txtHoyde”).value
    加载页面后,您希望立即返回什么?据我所见,没有价值。如果我不取任何值并对其进行计算,那么结果肯定是NotANumber。文本框中的初始值默认为0,因此您的
    vekt/(hoyde*vekt)
    除以0。加载站点时会触发窗口onload事件,因此当用户打开站点时。此时(我假设文本输入为空)。此外,如果您这样做,函数beregnen将立即执行。此外,您需要使用parseFloat(或类似的东西)解析文本输入的值。那么,您希望
    document.getElementById(“txtHoyde”).value
    在页面加载后立即返回什么?据我所见,没有价值。如果我不取任何值并对其进行计算,那么结果肯定是NotANumber。文本框中的初始值默认为0,因此您的
    vekt/(hoyde*vekt)
    除以0。加载站点时会触发窗口onload事件,因此当用户打开站点时。此时(我假设文本输入为空)。此外,如果您这样做,函数beregnen将立即执行。此外,您还需要使用parseFloat(或类似的东西)解析文本输入的值:P.我看到了“0”示例值,几乎想响应,但后来您更改了它们。。。。哇,糟透了:D.哈哈,我写答案太快了,但幸运的是我自己抓住了答案。由于使用了
    onclick
    属性,我对你的答案投了反对票。你答对了90%。您应该使用
    window.onload=function(){document.getElementById('btnbegreggn')。onclick=begregn;}@Marc answer也有同样的问题。我正在使用
    onclick
    属性与兼容IE@IsmaelMiguel我认为我们两人都不应该投反对票。该解决方案是正确的,并且与所有现代浏览器兼容。OP是否要求与谁推荐的iRE兼容
    addEventListener
    在IE 8和d中甚至不起作用