もくじ
フロントエンドの業務でよく使用するJavaScriptのイベントハンドラとイベントハンドラの登録方法についてまとめました。
イベントハンドラとは?
イベントハンドラは、ユーザーがウェブページで行うアクション(クリック、キーボード入力、マウス移動など)に対して特定のコードを実行するための仕組みです。
イベントハンドラを設定することで、インタラクティブなウェブページを作成することができます。
よく使用されるイベントハンドラ一覧
- blur
- フォーカスが外れたとき
- click
- 要素がクリックされたとき
- change
- 内容が変更されたとき
- drag
- 要素がドラッグされたとき
- focus
- フォーカスが当たったとき
- keydown
- キーボードのキーが押されたとき
- keyup
- キーボードのキーが離されたとき
- load
- ページやリソースが読み込まれたとき
- mousemove
- マウスを動かしているとき
- mouseout
- マウスが要素から離れたとき
- mouseover
- マウスが要素の上に乗ったとき
- resize
- ウィンドウサイズが変更されたとき
- submit
- フォームが送信されたとき
- scroll
- ページや要素がスクロールされたとき
- select
- テキストなどが選択されたとき
基本的なイベントハンドラの登録方法
基本的なイベントハンドラの登録方法を3つ紹介します。
使用頻度は3つ目に解説しているaddEventListener
メソッドを使用することが多いです。
1. HTMLの属性を使う方法
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>【JavaScript】イベントハンドラ</title>
</head>
<body>
<button onclick="alert('ボタンがクリックされました!')">クリック</button>
</body>
</html>
2. JavaScript内で設定する方法
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>【JavaScript】イベントハンドラ</title>
</head>
<body>
<button id="myButton">クリック</button>
<script>
document.getElementById('myButton').onclick = function() {
alert('ボタンがクリックされました!');
};
</script>
</body>
</html>
3. addEventListenerメソッドを使う方法
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>【JavaScript】イベントハンドラ</title>
</head>
<body>
<button id="myButton">クリック</button>
<script>
document.getElementById('myButton').addEventListener('click', function() {
alert('ボタンがクリックされました!');
});
</script>
</body>
</html>
addEventListenerメソッドを使うメリット
複数のイベントハンドラを追加できる
addEventListener
を使用すると、同じイベントに対して複数のイベントハンドラを追加することができます。
これにより、特定の要素で異なる動作を同時に実行することができます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>【JavaScript】イベントハンドラ</title>
</head>
<body>
<button id="myButton">クリック</button>
<script>
document.getElementById('myButton').addEventListener('click', function() {
alert('クリックイベント1');
});
document.getElementById('myButton').addEventListener('click', function() {
alert('クリックイベント2');
});
</script>
</body>
</html>
インラインイベントハンドラの上書きを避けることができる
addEventListener
を使用すると、既存のインラインイベントハンドラ(HTML属性に直接書かれたイベントハンドラ)が上書きされることを避けることができます。
これにより、他のスクリプトやライブラリと干渉せずにイベントを追加できます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>【JavaScript】イベントハンドラ</title>
</head>
<body>
<button id="myButton" onclick="alert('インラインイベントハンドラ')">クリック</button>
<script>
document.getElementById('myButton').addEventListener('click', function() {
alert('追加のイベントハンドラ');
});
</script>
</body>
</html>
より柔軟なイベントハンドリング
addEventListener
を使用すると、イベントハンドラを削除するためのremoveEventListener
メソッドを使用できます。
これにより、特定の条件下でイベントハンドラを動的に削除することができます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>【JavaScript】イベントハンドラ</title>
</head>
<body>
<button id="myButton">クリック</button>
<script>
const button = document.getElementById('myButton');
function handleClick() {
alert('ボタンがクリックされました!');
}
button.addEventListener('click', handleClick);
// 条件に応じてイベントハンドラを削除
// ここでは例としてすぐにイベントハンドラを削除しています
button.removeEventListener('click', handleClick);
</script>
</body>
</html>
動的に生成された要素に対してもイベントハンドラを設定できる
動的に生成された要素にイベントハンドラを設定する場合、要素生成後にイベントハンドラを設定する必要があります。
addEventListener
を使用することで、後から動的に生成された要素に対してもイベントハンドラを設定することができます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>【JavaScript】イベントハンドラ</title>
</head>
<body>
<script>
document.addEventListener('click', function(event) {
if (event.target.matches('#myButton')) {
alert('ボタンがクリックされました!');
}
});
// 新しいボタン要素を作成
let button = document.createElement('button');
// ボタンに id 属性とテキストを設定
button.id = 'myButton';
button.textContent = 'クリック';
// ボタンを body の先頭に追加
document.body.insertBefore(button, document.body.firstChild);
</script>
</body>
</html>
モダンなイベントハンドリング
addEventListener
は、HTML5以降の標準的なイベントハンドリング方法で、多くのモダンブラウザでサポートされています。
これにより、より一貫性のあるコードを書きやすくなります。
同じクラスを持つ要素にイベントを登録する方法
JavaScriptのquerySelectorAll
メソッドで要素を取得し、forEach
ループを使って各要素にイベントハンドラを追加することができます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>【JavaScript】イベントハンドラ</title>
</head>
<body>
<button class="clickable">クリック 1</button>
<button class="clickable">クリック 2</button>
<button class="clickable">クリック 3</button>
<script>
// .clickableクラスを持つ全ての要素を取得
const elements = document.querySelectorAll('.clickable');
// 各要素にイベントハンドラを追加
elements.forEach(function(element) {
element.addEventListener('click', function() {
alert(`${element.textContent} がクリックされました!`);
});
});
</script>
</body>
</html>