GO TO TOP
ゲーム制作講座

制作講座目次 / PREV(乱数を使いこなせ) / NEXT(画像を使いこなせ) / トップページ / text mode
basic
3.フォームを使いこなせ

★フォームって?

ホームページで、懸賞の応募用紙や掲示板の書き込み欄に、空欄やボタンが設置されているのを見かけますよね? あのような入力装置をまとめて「フォーム」と言います。フォームには、主なものとして以下のような種類があります。
書式役割外見
<input type="text">テキストボックス。文字の入力欄。
<input type="button">ボタン。onClick="func();" を利用することで、クリック時に関数を実行させることが出来る。
<input type="radio">ラジオボタン。複数の選択肢から1つを選ばせる。
<input type="checkbox">チェックボックス。On/Off の設定をしたり、複数の選択肢から複数個を選ばせる。
<select><option></select>プルダウン。複数の選択肢から1つを選ばせる。スペースが小さく済むので便利。
<textarea></textarea>テキストエリア。複数行入力可能な入力欄。
<input type="password">パスワード入力欄。入力した値は* で表示され見えない。
<input type="reset">リセットボタン。全てのフォームを初期状態に戻す。

フォームの詳しい書式については、HTMLの本を参考にして下さい。
フォームの部品には、イベントハンドラが用意されています。onClick やonChange は、たいていのフォームで使えるので、フォームをクリックしたりすることで反応するプログラムを作ることが出来ます。

例えば、先程の「じゃんけん」をリンクではなくボタンで作ってみると、下のようになります。
<html><head>
<script language="JavaScript">
var aite;
var message;

function clickhere(n){
  aite=Math.floor(Math.random()*3+1);
  if(n==1) message="あなた:グー\n";
  if(n==2) message="あなた:チョキ\n";
  if(n==3) message="あなた:パー\n";
  if(aite==1) message+="相手:グー\n";
  if(aite==2) message+="相手:チョキ\n";
  if(aite==3) message+="相手:パー\n";
  
  if(n==aite) message+="あいこです";
  else {
    if((n+1)%3==aite%3) message+="あなたの勝ち";
    else message+="相手の勝ち";
  }
  alert(message);
}
</script></head>
<body>
じゃんけん大会! 好きなところをクリックしてね。<br>
<form>
<input type=button onClick="JavaScript:clickhere(1);" value="グー"><br>
<input type=button onClick="JavaScript:clickhere(2);" value="チョキ"><br>
<input type=button onClick="JavaScript:clickhere(3);" value="パー"><br>
</form></body></html>

★フォームへの出力

フォームに値を入れるときは、

document.フォーム名.部品(エレメント)名.value = 値;

で表します。ここで、フォーム名とは、<form name=… で書かれるnameの部分です。部品名は、<input type=button name=… で書かれるnameの部分ですが、部品番号を使って、elements[0]と表現することもあります。
ここで、「部品番号」という言葉が出てきましたが、部品番号*1というのは、フォームの部品を置いた順番に、0,1,2…と順番につく番号です。下の例を見てみましょう。

*1 「部品番号」というのは、分かりやすく説明するために、私が作った造語です。他の人に話しても通じません。ご注意下さい。

<html><head>
<script language="JavaScript">

function clickhere(n){
  alert(document.form1.elements[n].value);
}
</script></head>
<body>
<form name="form1">
<input type=button onClick="JavaScript:clickhere(0);" value="0番"><br>
<input type=button onClick="JavaScript:clickhere(1);" value="1番"><br>
<input type=button onClick="JavaScript:clickhere(2);" value="2番"><br>
</form></body></html>

「0番」のボタンの部品番号は0、以下、「1番」は1、「2番」は2となります(部品番号は0から始まります!)。上のプログラムでは、押した部品番号と同じボタンに書かれている文字を表示しています。

さて、話を戻しましょう。フォームへの出力でしたね。
フォームへの出力が可能になると、今までalert で結果を表示していたものが、テキストボックスなどで表示できるので、表現が広がります。「じゃんけん」で、テキストボックスを使ってみましょう。
<html><head>
<script language="JavaScript">
var aite;
var message;

function clickhere(n){
  aite=Math.floor(Math.random()*3+1);
  if(n==1) message="グー";
  if(n==2) message="チョキ";
  if(n==3) message="パー";
  document.form1.elements[3].value=message; //あなたの手
  if(aite==1) message="グー";
  if(aite==2) message="チョキ";
  if(aite==3) message="パー";
  document.form1.elements[4].value=message; //相手の手
  
  if(n==aite) message="あいこです";
  else {
    if((n+1)%3==aite%3) message="あなたの勝ち";
    else message="相手の勝ち";
  }
  document.form1.elements[5].value=message; //結果表示
}
</script></head>
<body>
じゃんけん大会! 好きなところをクリックしてね。<br>
<form name="form1">
<input type=button onClick="JavaScript:clickhere(1);" value="グー"><br>
<input type=button onClick="JavaScript:clickhere(2);" value="チョキ"><br>
<input type=button onClick="JavaScript:clickhere(3);" value="パー"><br><br>
あなたの手 <input type=text><br>
相手の手 <input type=text><br>
結果 <input type=text><br>
</form></body></html>

message+=… となっている所が、message=…となっている点にも注意して下さい。これは、3個それぞれのテキストボックスに表示させるようにしたため、1度に複数行出力する必要が無くなったからです。
最初の部品を0番とすると、「あなたの手」は3番目、「相手の手」は4番目、「結果」は5番目となるので、elements[3],elements[4],elements[5] にそれぞれ出力しています。
なお、この出力方法は、<textarea></textarea>でも可能です。試してみましょう。

★フォームからの入力

テキストボックスから入力するのであれば、出力の時と同様、document.フォーム名.部品(エレメント)名.value を使います。
alert(document.フォーム名.部品(エレメント)名.value); とすれば、テキストボックスに書いた文字列をそのままalert で表示することが出来ます。
<html><head>
<script language="JavaScript">

function clickhere(){
  alert(document.form1.elements[0].value+"さん、こんにちは!");
}
</script></head>
<body>
<form name="form1">
名前→ <input type=text><br>
<input type=button onClick="JavaScript:clickhere();" value="クリック!"><br>
</form></body></html>

ラジオボタンやチェックボックスの値(チェックが入っているか、入っていないか)を入力させたい場合は、

document.フォーム名.部品(エレメント)名.checked

を使います。もしチェックが入っていればtrue を、入っていなければfalse を返すので、if 文の処理が便利です。「じゃんけん」をラジオボタンで入力させる場合は、下のようにします。
<html><head>
<script language="JavaScript">
var aite;
var message;

function clickhere(){
  aite=Math.floor(Math.random()*3+1);
  var n=0;
  if(document.form1.elements[0].checked){ //グーにチェック
    n=1;
    message="グー";
  }
  if(document.form1.elements[1].checked){ //チョキにチェック
    n=2;
    message="チョキ";
  }
  if(document.form1.elements[2].checked){ //パーにチェック
    n=3;
    message="パー";
  }
  document.form1.elements[4].value=message; //あなたの手
  if(aite==1) message="グー";
  if(aite==2) message="チョキ";
  if(aite==3) message="パー";
  document.form1.elements[5].value=message; //相手の手
  
  if(n==aite) message="あいこです";
  else {
    if((n+1)%3==aite%3) message="あなたの勝ち";
    else message="相手の勝ち";
  }
  document.form1.elements[6].value=message; //結果表示
}
</script></head>
<body>
じゃんけん大会! 自分の手を選択したら「勝負」を押してね。<br>
<form name="form1">
<input type=radio name="myhand" value="goo" checked>グー<br>
<input type=radio name="myhand" value="choki">チョキ<br>
<input type=radio name="myhand" value="paa">パー<br>
<input type=button onClick="JavaScript:clickhere();" value="勝負"><br><br>
あなたの手 <input type=text><br>
相手の手 <input type=text><br>
結果 <input type=text><br>
</form></body></html>

上の例では、部品番号0〜3、すなわちラジオボタンにチェックが入っていれば、自分の手(変数n)にグーチョキパーが入ります。グーをデフォルト(<value="goo" checked>)にしているので、「どれもfalse を返す」といったことがありません。
また、関数clickhere() では引数を使っていないので、関数中でn の中身を代入している点にも注意して下さい。

プルダウンを使った選択も、よく見かけます。プルダウンの場合、複数の選択項目から1つを選ぶケースがほとんどなので、selectedIndex がよく使われます。書式は、

document.フォーム名.部品(エレメント)名.selectedIndex

です。返す値は、選択された番号(一番最初の<option>を0とする)です。
下の例は、「じゃんけん」でプルダウンを適応した例です。ラジオボタンの時とあまり変わりませんが、番号を返す分、n の代入文が楽になります。
<html><head>
<script language="JavaScript">
var aite;
var message;

function clickhere(){
  aite=Math.floor(Math.random()*3+1);
  var n=0;
  if(document.form1.elements[0].selectedIndex==0){ //グーが選択された
    message="グー";
  }
  if(document.form1.elements[0].selectedIndex==1){ //チョキを選択
    message="チョキ";
  }
  if(document.form1.elements[0].selectedIndex==2){ //パーを選択
    message="パー";
  }
  n=document.form1.elements[0].selectedIndex+1; //勝敗判定に利用
  document.form1.elements[2].value=message;
  if(aite==1) message="グー";
  if(aite==2) message="チョキ";
  if(aite==3) message="パー";
  document.form1.elements[3].value=message;
  
  if(n==aite) message="あいこです";
  else {
    if((n+1)%3==aite%3) message="あなたの勝ち";
    else message="相手の勝ち";
  }
  document.form1.elements[4].value=message;
}
</script></head>
<body>
じゃんけん大会! 自分の手を選択したら「勝負」を押してね。<br>
<form name="form1">
<select><option>グー<br>
<option>チョキ<br>
<option>パー<select><br>
<input type=button onClick="JavaScript:clickhere();" value="勝負"><br><br>
あなたの手 <input type=text><br>
相手の手 <input type=text><br>
結果 <input type=text><br>
</form></body></html>

なお、<select>の部分を、<select onChange="JavaScript:clickhere();">とすると、ボタンを押さなくても「勝負」できます。試してみましょう。


制作講座目次 / PREV(乱数を使いこなせ) / NEXT(画像を使いこなせ)
記事の無断転載を禁ず(リンクは歓迎)
質問があればメールでどうぞ
(送ってくれた質問は、FAQとしてここに載せることがあります。質問者の名前は公開しません。)