JavaScript プログラミング |
4.合計・平均計算のページ作成
合計と平均を計算するページを作成する。ちょっとしたアプリケーション?である。
まずは合計の計算だけとし、データの個数は最大5個とする。
(1) フォームの準備
フォームを1つ用意し、次の入力部品を配置(左図参照)する。
フォームはname="fk"とする。
・1行テキスト … size="20" type="text" name="d1"
・1行テキスト … size="20" type="text" name="d2"
・1行テキスト … size="20" type="text" name="d3"
・1行テキスト … size="20" type="text" name="d4"
・1行テキスト … size="20" type="text" name="d5"
・1行テキスト … size="20" type="text" name="sum"
・ボタン … type="button" value="計算開始" イベント:OnClick
関数のプログラム
関数goukeiを作成して合計計算をする。引数として5つのデータを受け取り、合計を返却する。
引数:データ1〜5
返却値:データ1〜5の合計
プログラムリスト function goukei(x1,x2,x3,x4,x5){ a=parseInt(x1)+parseInt(x2)+parseInt(x3)+parseInt(x4)+parseInt(x5); return a; }
5つのデータをx1,x2,x3,x4,x5で受け取る。受け取ったデータは文字列なので、関数parseIntで整数に変換している。(実数に変換するには、関数parseFloatを使う。)
整数に変換しないで加算(x1+x2+x3+x4+x5)を行うと文字列の連結になる。
例えば、x1=1,x2=2,x3=3,x4=4,x5=5の場合、次のようになる。
計算 parseInt(x1)+parseInt(x2)+parseInt(x3)+parseInt(x4)+parseInt(x5)
→ 15
連結 x1+x2+x3+x4+x5 → 12345
イベントのアクション
1行テキストに入力された値はvalueプロパティで参照できる。例えば、テキストd1の値は、document.fk.d1.valueと表す。結果はテキストsumに表示する。
イベントのアクションは次のようになる。
onclick="document.fk.sum.value= goukei(document.fk.d1.value,document.fk.d2.value,document.fk.d3.value, document.fk.d4.value,document.fk.d5.value)"
全体のHTMLリストを次に示す。 [[ jsrei6.html ]]
<HTML> <HEAD> <TITLE>合計計算</TITLE> </HEAD> <BODY> <SCRIPT language="JavaScript"> <!-- function goukei(x1,x2,x3,x4,x5){ a=parseInt(x1)+parseInt(x2)+parseInt(x3)+parseInt(x4)+parseInt(x5); return a; } //--> </SCRIPT> <H3>合計計算のページ</H3> <FORM name="fk">データ<BR> 1.<INPUT size="20" type="text" name="d1"><BR> 2.<INPUT size="20" type="text" name="d2"><BR> 3.<INPUT size="20" type="text" name="d3"><BR> 4.<INPUT size="20" type="text" name="d4"><BR> 5.<INPUT size="20" type="text" name="d5"><BR> 合計 = <INPUT size="20" type="text" name="sum"> <INPUT type="button" value="計算開始" onclick="document.fk.sum.value= goukei(document.fk.d1.value,document.fk.d2.value,document.fk.d3.value, document.fk.d4.value,document.fk.d5.value);"> </FORM> </BODY> </HTML>
ブラウザで表示させて計算してみよう。
改良1 オブジェクトの配列
関数呼び出し時の引数が長く、データの個数を増やすときも不便である。
データ入力用の1行テキストの名前を次のようにすべて同じにする。
1.<INPUT size="20" type="text" name="dat"><BR> 2.<INPUT size="20" type="text" name="dat"><BR> 3.<INPUT size="20" type="text" name="dat"><BR> 4.<INPUT size="20" type="text" name="dat"><BR> 5.<INPUT size="20" type="text" name="dat"><BR>
1つ目のデータを参照するには、document.fk.dat[0].value とする。すなわち、同じ名前にすると入力部品は配列として参照することができる。上のようにした場合、dat[0]〜dat[4]でそれぞれの1行テキストを参照できる。
このままでは、関数呼び出し時の引数は短くならない。ここで、次のように引数としてオブジェクトだけを渡すようにする。
onclick="document.fk.sum.value = goukei(document.fk.dat)"
関数goukeiも次のように変更する。
function goukei(xx){ a = 0; for(n = 0; n < 5; ++n) a = a + parseInt(xx[n].value); return a; }
引数xxにはオブジェクト(document.fk.dat)が格納されているので、各データを参照するには xx[n].value と表す。
全体のHTMLリストを次に示す。 [[ jsrei6b.html ]]
<HTML> <HEAD> <TITLE>合計計算</TITLE> </HEAD> <BODY><SCRIPT language="JavaScript"> <!-- function goukei(xx){ a = 0; for(n = 0; n < 5; ++n) a = a + parseInt(xx[n].value); return a; } //--> </SCRIPT> <H3>合計計算のページ</H3> <FORM name="fk">データ<BR> 1.<INPUT size="20" type="text" name="dat"><BR> 2.<INPUT size="20" type="text" name="dat"><BR> 3.<INPUT size="20" type="text" name="dat"><BR> 4.<INPUT size="20" type="text" name="dat"><BR> 5.<INPUT size="20" type="text" name="dat"><BR> 合計 = <INPUT size="20" type="text" name="sum"> <INPUT type="button" value="計算開始" onclick="document.fk.sum.value=goukei(document.fk.dat);"> </FORM> </BODY> </HTML>
ブラウザで表示させて計算してみよう。
改良2 エラーチェック
5つのデータをすべて入力しないで計算すると、"NaN"と表示される。つまり、エラーである。また、数字以外の文字を入力してもエラーになる。
関数goukei内でデータのチェックを行う。
function goukei(xx){
a = 0;
for(n = 0; n < 5; ++n)
if(isNaN(parseInt(xx[n].value)) == false)
a = a + parseInt(xx[n].value);
return a;
}
関数isNaNは、引数が数値でないことをチェックする。数値、または数値として解釈可能な文字列であれば偽、それ以外は真を返す。NaN は Not a Number の意味である。
if文は否定(!)の演算子を使用して次のように書くこともできる。
if(!isNaN(parseInt(xx[n].value)))
全体のHTMLリストを次に示す。 [[ jsrei6c.html ]]
<HTML>
<HEAD>
<TITLE>合計計算</TITLE>
</HEAD>
<BODY><SCRIPT language="JavaScript">
<!--
function goukei(xx){
a = 0;
for(n = 0; n < 5; ++n)
if(!isNaN(parseInt(xx[n].value)))
a = a + parseInt(xx[n].value);
return a;
}
//-->
</SCRIPT>
<H3>合計計算のページ</H3>
<FORM name="fk">データ<BR>
1.<INPUT size="20" type="text" name="dat"><BR>
2.<INPUT size="20" type="text" name="dat"><BR>
3.<INPUT size="20" type="text" name="dat"><BR>
4.<INPUT size="20" type="text" name="dat"><BR>
5.<INPUT size="20" type="text" name="dat"><BR>
合計 = <INPUT size="20" type="text" name="sum">
<INPUT type="button" value="計算開始" onclick="document.fk.sum.value=goukei(document.fk.dat);">
</FORM>
</BODY>
</HTML>
ブラウザで表示させて計算してみよう。
JavaScript プログラミング | Copyright © 2003 Hiroshi Masuda |