💭

イベント系チートシート

に公開

自分用チートシートです。

イベントリスナーの登録

メソッド 説明 備考
element.addEventListener('event', handler, options) 推奨される方法。 複数のリスナーを登録でき、柔軟性が高い。options で詳細設定可能。 btn.addEventListener('click', handleClick); this はイベントを発生させた要素を指す。
element.removeEventListener('event', handler) addEventListenerで登録したリスナーを削除。handler関数が同じ参照である必要がある。 btn.removeEventListener('click', handleClick);
element.onevent = handler 古い方法。一つのイベントタイプにつき一つのリスナーしか登録できない。 btn.onclick = handleClick; this はイベントを発生させた要素を指す。
HTML属性 (<button onclick="...">) HTMLタグ内に直接記述。非推奨。 <button onclick="handleClick()">Click</button> this はグローバルオブジェクト(Window)を指す場合がある。

イベントオブジェクト

イベントハンドラー関数が呼び出されると、最初の引数としてイベントオブジェクト(Event)が渡されます。

プロパティ/メソッド 説明
event.type イベントのタイプ(例: 'click', 'keydown')。 console.log(event.type);
event.target イベントが最初に発生した要素(最も深い要素)。 console.log(event.target.tagName);
event.currentTarget イベントリスナーがアタッチされている要素。 console.log(event.currentTarget.id);
event.preventDefault() イベントのデフォルトの動作をキャンセルする。 e.preventDefault(); (リンクの遷移などを防ぐ)
event.stopPropagation() イベントの伝播(バブリング/キャプチャ)を停止する。 e.stopPropagation();
event.stopImmediatePropagation() stopPropagation()に加え、同じ要素の他のリスナーの実行も停止する。
event.key / event.code キーボードイベントで押されたキーの情報(KeyboardEvent)。 if (e.key === 'Enter') { ... }
event.keyCode / event.which 非推奨。event.key / event.code を使用。
event.button / event.buttons マウスイベントで押されたボタンの情報(MouseEvent)。 if (e.button === 0) { /* 左クリック */ }
event.clientX / event.clientY マウスポインタのクライアント領域(ビューポート)内でのX/Y座標。 console.log(e.clientX, e.clientY);
event.pageX / event.pageY マウスポインタのドキュメント内でのX/Y座標。

イベント伝播 (Event Propagation)

イベントはDOMツリーを伝播します。このプロセスには「キャプチャフェーズ」と「バブリングフェーズ」の2つがあります。

キャプチャフェーズ (Capturing Phase)

イベントはWindowオブジェクトから発生し、DOMツリーを下へと伝播し、イベントが発生した要素(event.target)に到達します。
addEventListenerの第三引数に { capture: true } を設定することで、このフェーズでイベントを処理できます。

バブリングフェーズ (Bubbling Phase)

イベントはイベントが発生した要素から始まり、DOMツリーを上へと伝播し、Windowオブジェクトまで到達します。
addEventListenerのデフォルトはバブリングフェーズでの処理です。

イベント委譲 (Event Delegation)

親要素にイベントリスナーを一つだけアタッチし、子孫要素から発生したイベントを処理するテクニック。これにより、メモリ使用量を抑え、動的に追加される要素にも対応できます。

// 親要素にリスナーを設定  
parentList.addEventListener('click', function(event) {  
  // クリックされた要素が特定のクラスを持つ場合のみ処理  
  if (event.target.classList.contains('list-item')) {  
    console.log('クリックされたリスト項目:', event.target.textContent);  
  } 
}); 

主要なイベントタイプ

カテゴリ イベントタイプ 説明
マウスイベント click 要素がクリックされた時。
dblclick 要素がダブルクリックされた時。
mousedown マウスボタンが押された時。
mouseup マウスボタンが離された時。
mousemove マウスカーソルが移動された時。
mouseover マウスカーソルが要素の上に乗った時(バブリングあり)。
mouseout マウスカーソルが要素から離れた時(バブリングあり)。
mouseenter マウスカーソルが要素の上に乗った時(バブリングなし)。
mouseleave マウスカーソルが要素から離れた時(バブリングなし)。
キーボードイベント keydown キーが押された時(押し続けられる)。
keyup キーが離された時。
keypress 文字が生成された時(非推奨)。
フォームイベント submit フォームが送信された時。
input input, textareaなどの値が変更された時(入力中も発火)。
change input, select, textareaなどの値が変更され、要素からフォーカスが外れた時。
focus 要素がフォーカスを受け取った時。
blur 要素がフォーカスを失った時。
ドキュメント/ウィンドウイベント DOMContentLoaded HTMLが完全に読み込まれ、パースされた時(CSSや画像は待たない)。
load ページ全体(HTML、CSS、画像など)が完全に読み込まれた時。
resize ウィンドウのサイズが変更された時。
scroll 要素(通常はウィンドウ)がスクロールされた時。
ドラッグ&ドロップ dragstart, drag, dragend, drop など 要素がドラッグ&ドロップされた時。

Discussion