GO TO TOP
ゲーム制作講座

制作講座目次 / PREV(JavaScriptの基礎知識) / NEXT(乱数を使いこなせ) / トップページ / text mode
basic
1.イベントハンドラを使いこなせ

★クリックすると反応するプログラム

さあ、いよいよ本題に入りますよ!
まずは、「クリックすると反応するプログラム」です。
下のプログラムを実行してみてください。

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

function clickhere(){
  alert("クリックしたな〜");
}
</script></head>
<body>
<a href="JavaScript:clickhere();">ここをクリック</a>
</body></html>

…え? このプログラムは、さっき書いたものと同じじゃないかって? …そうです(笑)。それでは、もう少し凝ったものを書いてみましょうか。当たりの場所を探す、「宝探しゲーム」です。

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

function clickhere1(){
  alert("はずれ");
}
function clickhere2(){
  alert("あたり");
}
function clickhere3(){
  alert("はずれ");
}
</script></head>
<body>
宝探しゲーム! どこか好きなところをクリックしてね。<br>
<a href="JavaScript:clickhere1();">その1</a><br>
<a href="JavaScript:clickhere2();">その2</a><br>
<a href="JavaScript:clickhere3();">その3</a><br>
</body></html>

このゲームでは、その2をクリックしたときのみ、関数「clickhere2()」が実行され、当たりが表示されるようになっています。ちょっとゲームっぽくなったと思いませんか?
しかし、このプログラムは、<script>内に同じような関数を3つも書いているので、少し無駄が多くなっています。ちょっと修正しましょう。

★関数と引数

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

function clickhere(n){
  if(n==2) alert("あたり");
  else alert("はずれ");
}
</script></head>
<body>
宝探しゲーム! どこか好きなところをクリックしてね。<br>
<a href="JavaScript:clickhere(1);">その1</a><br>
<a href="JavaScript:clickhere(2);">その2</a><br>
<a href="JavaScript:clickhere(3);">その3</a><br>
</body></html>

関数が、clickhere 1つだけになりました。その代わり、括弧の中に数字が入っています。これを専門用語で「引数(ひきすう)」と言います。
タグ<a href="JavaScript:clickhere(1);">の部分では、引数の中身は数値(又は文字列)、関数のfunction clickhere(n)の部分では、引数の中身は変数です。これは例えば、「関数clickhere(1)を実行するときは、nに1を代入しなさいよ」ということになります。
関数clickhereの中身は、if文が書かれていて、n==2の時、すなわち clickhere(2)が実行されたときのみ、当たりを表示するプログラムになっています。

★クリック回数をカウントする

とりあえず宝探しゲームの完成です。しかし、この程度のプログラムならHTMLの<a>タグを駆使すれば作れそうです。そこで、もう少しJavaScriptらしさを出すために、「1回しかクリックできない」ようにしてみます。

<html><head>
<script language="JavaScript">
var count=0;

function clickhere(n){
  count++;
  if(count==1){
    if(n==2) alert("あたり");
    else alert("はずれ");
  }
  else{
    alert("2回もクリックしちゃ、ダメダメ!");
  }
}
</script></head>
<body>
宝探しゲーム! どこか好きなところを1回だけクリックしてね。<br>
<a href="JavaScript:clickhere(1);">その1</a><br>
<a href="JavaScript:clickhere(2);">その2</a><br>
<a href="JavaScript:clickhere(3);">その3</a><br>
</body></html>

ここでは、変数 count を使って、クリックした数をカウントしています。まず、ページがロードされたときに、変数 count を初期値0で宣言し、clickhere(n)が実行されるたびに1を加えます(count++)。そして、count が1ならクリック1回目と見なし、nを判定するif文へ移ります。count が2以上なら、別のメッセージを表示します。
なお、リロード(更新)すると、全ての変数がリセットされるので注意してください。

★その他のイベントハンドラ

さて、宝探しゲームでは、リンクをクリックしたときに関数を実行しました。この「クリックする」といった動作をまとめて「イベントハンドラ」と呼びます。主なイベントハンドラを下に挙げます。宝探しゲームの中身を変更して、いろいろ試してみましょう。

イベントハンドラ内容使用例
onClickリンクやボタンがクリックされたときに実行。<a href="JavaScript:clickhere(2);">と同じ。<a href=# onClick="clickhere(2);">*1
onMouseOverマウスがリンクの上に乗ったとき実行。<a href=# onMouseOver="clickhere(2);">
onMouseOutマウスがリンクから離れたとき実行。<a href=# onMouseOut="clickhere(2);">
onLoadページがロード完了されたときに実行。<body onLoad="clickhere(2);">
onUnload他のページへ移動するときに実行。<body onUnload="clickhere(2);">
onChangeテキストボックス等の中身が変更されたときに実行。<form><input type=text onChange="clickhere(2);"></form>
onSubmit送信ボタンを押したときに実行。<form onSubmit="clickhere(2);"><input type=submit></form>

*1 a href=# は、リンク先がないことを示します。試しにクリックしてみると分かりますが、ページはどこにも移動しません。(ページを移動させたい場合は、a href= の後にファイル名を入れてください)


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