参考にさせていただいた記事
https://developer.mozilla.org/ja/docs/Learn_web_development/Core/Scripting/Events
学習トピックの整理
JavaScriptにおけるイベント制御
① イベントの基本
- イベントとは何か?
- イベントの種類
- イベントの登録方法
② イベントの実行フロー
- イベントの伝播(キャプチャリング、ターゲット、バブリング)
- イベントの委譲(イベントデリゲーション)
③ イベントオブジェクト
- イベントオブジェクトの構造
-
e.target
vse.currentTarget
-
preventDefault()
/stopPropagation()
の活用
④ イベントのデフォルト動作
- デフォルト動作とは?
-
preventDefault()
による制御 - 具体的なデフォルト動作の例
イベントの基礎
イベントとは何か?
ユーザー操作やページ読み込みなど、処理の実行の起点となる出来事を指します。
イベントが発生すると、ブラウザーがシグナルを発し、対応するコード(イベントハンドラー)が実行される仕組みです。
イベントの発生時のフロー
-
イベントオブジェクトの生成
- イベントが発生すると、ブラウザーは
event
オブジェクトを生成。 -
event
オブジェクトには、発生源(e.target
)やキーコードなどの情報 が含まれる。
- イベントが発生すると、ブラウザーは
-
キャプチャリングフェーズ
-
DOMツリーのルート要素 から ターゲット要素(
e.target
) に向かって イベントが伝播する。 - これを 「キャプチャリングフェーズ」 と呼ぶ。
-
DOMツリーのルート要素 から ターゲット要素(
-
ターゲットフェーズ
-
e.target
(イベントが発生した要素)に到達。 - 登録された イベントリスナーのコールバック関数が実行 される。
-
-
バブリングフェーズ
-
e.target
からルート要素に向かって、イベントが逆方向に伝播。 - これを 「バブリングフェーズ」 と呼ぶ。
-
イベントの伝播と実行条件
イベントハンドラーが実行される条件
伝播経路にある要素
イベントリスナーの type
と event.type
が一致
適切なフェーズで登録されている(capture
or bubble
)
-
addEventListener()
のデフォルト設定では バブリングフェーズ で実行される。 -
キャプチャリングフェーズ で実行するには
addEventListener(type, callback, true)
のtrue
を指定する。 - バブリングを活用して、親要素で子要素のイベントを一括管理する手法 を 「イベントの委譲(Event Delegation)」 と呼ぶ。(パフォーマンス向上)
イベントオブジェクトの主なプロパティ
プロパティ | 説明 |
---|---|
type |
発生したイベントの種類(例: click , keydown ) |
target |
イベントが発生した最も深い階層の要素(例: div 内の button をクリック → e.target === button ) |
currentTarget |
現在のイベントリスナーが登録されている要素(バブリング・キャプチャリングの際に変化する) |
preventDefault() |
デフォルト動作をキャンセル(例: <a> の遷移を防ぐ) |
stopPropagation() |
イベントの伝播をストップ(親要素へのバブリングを防ぐ) |
イベントのデフォルト動作
デフォルト動作とは?
ブラウザーは、特定のHTML要素とイベントの組み合わせに対して、あらかじめ決められた動作を実行します。
デフォルト動作の例
要素 | イベント | デフォルト動作 |
---|---|---|
<a> |
click |
ページ遷移 |
<form> |
submit |
フォーム送信 |
<input type="text"> |
keydown |
テキスト入力 |
<button> |
click |
type="submit" の場合、フォーム送信 |
<body> |
contextmenu |
右クリックメニュー表示 |
デフォルト動作の決定要素
要素の種類(フォーム、リンクなど)
イベントの種類(click
, submit
, contextmenu
など)
preventDefault()
の有無
ブラウザーの仕様