イベントハンドラの登録と実行

javascript

イベントハンドラの登録と実行

ここからは実際にサンプルを書いて、動きを試してみます。

イベントハンドラについて、まずはイベントハンドラの登録をします。
登録方法はaddEventListener()のメソッドか、attacheEvent()のメソッドです。
後者は古いブラウザ(IE)でサポートされており、時期に使われることがなくなる為
原則的にaddEventListenerメソッドを使います。

イベントハンドラ登録の簡単な例を書いて試してみます。
具体的には以下のように書きます。

let element_test = document.getElementById('test1');

element_test.onclick = function() {
	alert('on !');
}

DOM要素である「test1」を参照し、その参照結果を変数に代入したうえで、onclickイベントを登録しています。

HTML全体は以下のようになります。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>テストHTML</title>
</head>
<body>

<div id="test1">テスト</div>

<script type="text/javascript">
let element_test = document.getElementById('test1');

element_test.onclick = function() {
	alert('on !');
}
</script>

</body>
</html>

サーバ上のHTMLはこちら(test1.html)

アクセスして動きを確認してみると、画面上の「テスト」の文字列をクリックするとダイアログが表示されます。

このイベントハンドラの登録方法は、簡単な書き方ですが、実際に開発を進めるとイベント処理が複雑になってくるケースがあるので別な書き方でイベントハンドラを登録します。(後に投稿します)

イベントハンドラを直接HTML DOM要素内に記述する方法

イベントハンドラの登録方法は、上記サンプルの他、HTMLタグ内に記述する方法もあります。
以下のサンプルを試してみます。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>テストHTML</title>
</head>
<body>

<div id="test1" onclick="alert('test1');">テスト1</div>

</body>
</html>

サーバ上のHTMLはこちら(test2.html)

動作をみてみると、「テスト1」という文字をクリックするとtest1.htmlと同様に、onclickイベントが動いていることがわかります。

ブラウザ全体に対して作用するイベントハンドラ

これまでのサンプルでは、画面上のDOM要素に対してイベントハンドラを登録して動かしてみました。
DOM要素ではなく、画面(ブラウザ)全体に対して登録するイベントハンドラもあります。

具体的にはwindowに

onafterprint
onbeforeprint
onbeforeunload
oncancel
onhashchange
onmessage
onoffline
ononline
onpagehide
onpageshow
onpopstate
onresize
onshow
onstorage

試しに「onresize」について、サンプルを書いて動かしてみます。

下記のサンプルHTMLを用意しました。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>テストHTML</title>
</head>
<body>

<div id="test1">テスト</div>

<script type="text/javascript">
// ウィンドウ取得
let window_test = window;

window_test.onresize = function() {
	alert('onresize !');
}
</script>

</body>
</html>

サーバ上のHTMLはこちら(test3.html)

実際にアクセスして、ブラウザのサイズを変更するとわかるのですが、
上記のサンプルでは、onresizeのイベントが発生する間隔が短く、ウィンドウサイズをいろいろと変更すると
何度もonresizeイベントが呼ばれていることがわかります(アラートのダイアログが何度も表示されます)。

最近の開発では、実際にはネイティブのjavascriptコードでイベントハンドラの登録や、制御を行うことは非常にすくなく、
外部javascirptライブラリやフレームワークの利用がメインなので、上記の書き方は参考程度にしておいたほうがよいかと思います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です