JavaScript イベント: ウェブページに動的なインタラクションを!
HTML要素上で発生する様々な出来事、それがイベントです。JavaScriptは、このイベントをトリガーにして、動的な処理を実行することができます。例えば、ボタンクリック、マウスオーバー、ページの読み込み完了など、ユーザーの操作やブラウザの状態変化に応じて、JavaScriptコードを実行し、ウェブサイトにインタラクティブな要素を追加できます。
本稿では、JavaScriptイベントの基礎から、イベントハンドラの登録、代表的なイベントの種類、そしてイベントを活用した実践的な例まで、体系的に解説します。
HTML イベント: 変化を捉える
HTMLイベントは、大きく分けてブラウザの動作によって発生するものと、ユーザーの操作によって発生するものがあります。
ブラウザイベントの例
-
ページの読み込み完了 (load)
-
ページのクローズ (unload)
ユーザーイベントの例
-
マウスのクリック (click)
-
マウスオーバー (mouseover)
-
キーボードのキー押下 (keydown)
-
フォーム要素への入力 (change)
イベントハンドラ: イベント発生時の処理を定義
イベントが発生した際に実行したい処理は、イベントハンドラとして定義します。HTML要素にイベントハンドラ属性を追加し、JavaScriptコードを記述する方法が一般的です。
インラインイベントハンドラ: HTML要素に直接記述
HTML要素の属性値として、直接JavaScriptコードを記述する方法です。
<button onclick="alert('ボタンがクリックされました!')">クリック</button>
イベントリスナー: JavaScriptでイベントハンドラを登録
JavaScriptの addEventListener() メソッドを使って、イベントハンドラを登録する方法です。
const button = document.querySelector('button');
button.addEventListener('click', function() {
alert('ボタンがクリックされました!');
});
イベントハンドラ属性とイベントリスナーの比較
特徴 | イベントハンドラ属性 | イベントリスナー |
記述方法 | HTML要素に直接記述 | JavaScriptで登録 |
複数のハンドラの登録 | 不可 | 可能 |
イベントの伝播制御 | 不可 | 可能 (stopPropagation() など) |
よく使われるHTMLイベント
イベント | 説明 |
change | フォーム要素の値が変更された時 |
click | 要素がクリックされた時 |
mouseover | マウスポインターが要素上に乗った時 |
mouseout | マウスポインターが要素上から離れた時 |
keydown | キーボードのキーが押された時 |
keyup | キーボードのキーが離された時 |
load | ページの読み込みが完了した時 |
unload | ページがアンロードされた時 (例: 別のページへ遷移、ブラウザを閉じる) |
より詳細なイベント一覧: https://developer.mozilla.org/ja/docs/Web/Events
JavaScript イベント: 実践例
例1: クリックで要素の表示を切り替える
<button id="toggle-button">表示切り替え</button>
<p id="target-element" style="display: none;">このテキストは最初は非表示です</p>
<script>
const button = document.getElementById('toggle-button');
const targetElement = document.getElementById('target-element');
button.addEventListener('click', function() {
if (targetElement.style.display === 'none') {
targetElement.style.display = 'block';
} else {
targetElement.style.display = 'none';
}
});
</script>
例2: フォームの入力値をリアルタイムでチェック
<label for="username">ユーザー名:</label>
<input type="text" id="username">
<p id="username-error" style="color: red;"></p>
<script>
const usernameInput = document.getElementById('username');
const usernameError = document.getElementById('username-error');
usernameInput.addEventListener('input', function() {
if (usernameInput.value.length < 3) {
usernameError.textContent = 'ユーザー名は3文字以上で入力してください';
} else {
usernameError.textContent = '';
}
});
</script>
まとめ: イベントでウェブサイトに命を吹き込む
JavaScriptイベントは、静的なHTMLに動的なインタラクションを加えるための強力な武器です。イベントの種類、イベントハンドラの登録方法、そして具体的なユースケースを理解することで、ユーザーを惹きつける、魅力的なウェブサイトを構築することができます。
関連QA
Q1: イベントハンドラ属性とイベントリスナー、どちらを使うべきですか?
A1: 基本的には、複数のイベントハンドラを登録したり、イベントの伝播を制御したりできるイベントリスナーを使う方が柔軟性が高いです。イベントハンドラ属性は、シンプルで短いコードを書く場合には便利です。
Q2: 特定の要素にイベントがバブリングするのを止めるにはどうすればよいですか?
A2: イベントハンドラ関数内で event.stopPropagation() を呼び出すことで、イベントのバブリングを止めることができます。
Q3: JavaScript でカスタムイベントを作成することはできますか?
A3: はい、 new Event() コンストラクタを使ってカスタムイベントを作成し、 dispatchEvent() メソッドを使って要素に dispatch することができます。これにより、独自のイベントシステムを構築することができます。