• 締切済み

javascriptでフォームの値の計算

javascript1か月目の初心者です。 7つのテキストフィールドに数値を代入させて合計と平均(最後には標準偏差)を計算しようと思ってます。 以下のように考えましたが、うまくいきません。 strが文字列として?扱われてしまっているようです。 strをevalで囲んでみてもダメです。 詳しい方教えてください。 <!--スクリプト1--> <SCRIPT LANGUAGE="JavaScript"> <!-- function f_check() { if(document.F1.num1.value!=""&&document.F1.num2.value!=""&&document.F1.num3.value!=""&&document.F1.num4.value!=""&&document.F1.num5.value!="" &&document.F1.num6.value!=""&&document.F1.num7.value!=""){ str=0 for(var i = 0;i<document.F1.length;i++){ str+=document.F1[i].value; } alert('合計は'+str+"です"); avrg = (str)/document.F1.length; alert('平均は'+avrg+'です'); //ここから標準偏差の計算(略)。 } // --> </SCRIPT> <form method="post" name="F1" onSubmit="return f_check()"> 数値を入れてください<input type="text" name="num1" size="5"><br> 数値を入れてください<input type="text" name="num2" size="5"><br> 数値を入れてください<input type="text" name="num3" size="5"><br> 数値を入れてください<input type="text" name="num4" size="5"><br> 数値を入れてください<input type="text" name="num5" size="5"><br> 数値を入れてください<input type="text" name="num6" size="5"><br> 数値を入れてください<input type="text" name="num7" size="5"><br> <INPUT TYPE=SUBMIT VALUE="平均をとる"></FORM>

みんなの回答

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

#2です。 記載ミスしてました。 誤: alert(a + 1); //   1234 正: alert(a + 1); //   1231

noname#144507
質問者

お礼

テキストフィールドをすべてnumとして str=0; for(var i = 0;i<document.F1.num.length;i++){ str+= parseInt(document.F1[i].value); } alert('合計は'+str+"です"); とすることで解決しました。勉強になりました。 またお願いします。

noname#144507
質問者

補足

ありがとうございます。 str=0; for(var i = 0;i<document.F1.length;i++){ str+= parseInt(document.F1[i].value); alert('合計は'+str+"です"); } とすると、フォームの値ごと足されたてアラートが出ます。プラスされているようです。 しかし str=0; for(var i = 0;i<document.F1.length;i++){ str+= parseInt(document.F1[i].value); } alert('合計は'+str+"です"); とすると、NaNが吐かれてしまいます。最後のサブミットボタンの値が計算されちゃってるみたいです。サブミットボタンに数字を入れると、最後まで計算された数だけが出ます。 num1+num2+num3・・・・・ というやり方ではなく、あくまで「テキストフィールドの数」 という形で計算させたいのですが、案がございましたら教えてください。 (getElementsByTagNameとかでしょうか?)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

文字列を数値化してあげればよろしいかと。 var a = "123"; alert(a + 1); //   1234 alert(Number(a) + 1); // 124 alert(parseInt(a) + 1); //124 alert(+a + 1); //    124 alert((a | 0) + 1); //  124 var b = "12a"; alert(isNaN(a) + " / " + isNaN(b)); // false / true 入力された値が、数値とは限らないのでそのチェックも必要かと。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

JavaScriptには parseIntやparseFloatという ビルドイン関数があります これを使いましょう

関連するQ&A