2017-03-13 12 views
1

何が間違っていますか?教科書の例によると、これは十分なコードであると思われますが、ブラウザでNaNを実行すると得られます。NaN、BMI計算ツールを実行しているとき

<!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> 
+1

まあ、 'document.getElementById(" txtHoyde ")。value'は、ページが読み込まれた直後に何を返すのでしょうか?私が見ることから、価値はありません。私が価値を持たずに数学を行うなら、結果は必ずNotANumberでなければなりません。 – csmckelvey

+0

テキストボックスの初期値はデフォルトで0になっていますので、vekt /(hoyde * vekt)は0で割っています。 –

+0

window onloadイベントは、サイトのロード時にトリガされるので、ユーザがサイトを開くとトリガします。その時点で(私は、テキスト入力は空であると仮定します)。また、このようにすると、関数beregnenが即座に実行されます。さらに、parseFloat(または類似のもの)を使用してテキスト入力の値を解析する必要があります。 – scriptify

答えて

0
  1. は機能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> 
0

hoydevektは入力以来、ページのロードが空である任意の値を持っていないので、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> 

それとも、窓の負荷にbegregnを実行していないが、ボタンをクリックしたときのみ

+0

:P。私は "0"サンプル値を見て、ほとんど反応すると思っていましたが、あなたはそれらを変えました....恐怖、悪い:D。 –

+0

haha​​私はあまりにも迅速に答えを書いたが、幸いにも自分自身をキャッチ – Pabs123

+1

これはどのようにdownvotedですか? – Pabs123

0

window.onload runs ... on window load。 :)

変更window.onload = beregn();に:あなたが最初の関数

  • を実行したときにあなたの値が初期化されていない

    var btn = document.getElementById("btnBeregn"); btn.addEventListener("click", beregn);

  • 関連する問題