イベント処理
イベントとは
- 何らかの状態が起こったときに生まれるメッセージのようなもの
- JavaScriptに用意されている「イベントハンドラ」という仕組みを使うと、このイベントを捕まえて適切な処理を行うことができます
イベントハンドラ
JavaScriptに限らず、ActionScriptなどGUIプログラミングでは、重要な役割をするのが「イベント」の扱いです。
イベントハンドラの基礎
イベントハンドラを使う
関数を記述する
<script> <!-- var count = 0; function clickCheck() { ++count; alert ('クリック回数:' + count); } //--> </script>
- 関数内部に変数「count = 0」を入れてしまうと、内部だけで有効な「ローカル変数」になってしまい、関数が呼び出されるたびに初期化され、ダイアログには毎回「1」を表示してしまう
フォームにイベントハンドラを記述する
<form> <p> <input type="button" value="クリック" onClick="clickCheck()"> </p> </form>
イベントハンドラをプログラムで設定する
フォームに名前をつける
<form name="form1"> <p> <input name="btn1" type="button" value="クリック"> </p> </form>
onClick関数を記述する
<body> <form name="form1"> <p> <input name="btn1" type="button" value="クリック"> </p> </form> <script> <!-- document.form1.btn1.onclick = clickCheck; var count = 0; function clickCheck() { ++count; alert ('クリック回数:' + count); } //--> </script> </body>
もし、body内ではなくhead要素の中に「script」が記述されている場合は、エラーが発生します。
「document.form1」が定義されていないとうエラーです。
ActionScriptでおなじみの「匿名関数(無名関数)」で定義してみます。
<script> <!-- window.onload = function() { document.form1.btn1.onclick = clickCheck; } var count = 0; function clickCheck() { ++count; alert ('クリック回数:' + count); } //--> </script>
これでエラーがなくなりました。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>イベントハンドラのテスト</title> <script> function func1(str) { alert(str + 'platformがクリックされました'); } function init() { alert('ドキュメントがロードされました'); } window.onload = init; </script> </head> <body> <form id="myForm" name="myForm"> <p> <input type="button" value="ボタン1" name="button1" onclick="func1('ボタン1');"> </p> </form> </body> </html>
注意
- イベントハンドラは「script」内に記述する場合は、「イベント名はすべて小文字で記述する」
- タグ内で属性として記述する場合は大文字/小文字を区別しません(つまり、属性として「onClick」と記述する場合のみ、大文字が使用されます)
- 以下の表のような記述をそのまま、「script」内に記述することはできません(メソッド名がキャメルケースの記述にするものがあることから採用された、意味を理解しやすいための記述です)
わかりやすさよりも、エラーのない記述のためには「イベント名はすべて小文字で記述する」と決めておくと良いでしょう。
《主なイベントハンドラ一覧》
イベント ハンドラ | 説明 |
---|---|
onBlur | ページやフォーム要素からフォーカスが外れた時に発生 |
onFocus | ページやフォーム要素にフォーカスが当たった時に発生 |
onChange | フォーム要素の選択、入力内容が変更された時に発生 |
onSelect | テキストが選択された時に発生 |
onSubmit | フォームを送信しようとした時に発生 |
onReset | フォームがリセットされた時に発生 |
onAbort | 画像の読み込みを中断した時に発生 |
onError | 画像の読み込み中にエラーが発生した時に発生 |
onLoad | ページや画像の読み込みが完了した時に発生 |
onUnload | ウィンドウを閉じた時、他のページに切り替えた時、ページをリロード(更新)した時に発生 |
onClick | 要素やリンクをクリックした時に発生 |
onDblClick | 要素をダブルクリックした時に発生 |
onKeyUp | 押していたキーをあげた時に発生 |
onKeyDown | キーを押した時に発生 |
onKeyPress | キーを押してる時に発生 |
onMouseOut | マウスが離れたした時に発生 |
onMouseOver | マウス乗った時に発生 |
onMouseUp | クリックしたマウスを上げた時に発生 |
onMouseDown | マウスでクリックした時に発生 |
onMouseMove | マウスを動かしている時に発生 |
イベントハンドラの記述方法
- HTML要素内でイベントハンドラを設定する(2013年時点では、外部に記述するよう推奨されています。)
- ダブルクォート内の記述はシングルクォートにする
- クリックされると
- func1関数を呼び出す
- ダイアログボックスを表示する
イベントハンドラをプロパティとして設定する
- イベントハンドラは、オブジェクトのプロパティとして設定することもできます
- イベントハンドラ名は、すべて小文字で記述します
- 関数名の後ろに「( )」を記述することはできません
- 関数をオブジェクトとして扱うためです
オブジェクト名 . イベントハンドラ = 呼び出す関数名;
- HTMLドキュメントが読み込が完了すると(onload)
- init関数を呼び出す
- ダイアログボックスを表示する