JavaScript/DOM/Lesson 14
イベント — *ユーザー入力への反応*
1時間·theory
このチャプター
2/2
イベント — *ユーザー入力への反応*
🎯 このレッスンを読み終えたら
このレッスンをすべて読み終えると、次の3つを自信を持ってできるようになります。
- ▸✅ イベントキャプチャリング・バブリング・委譲 (delegation) パターン
- ▸✅ addEventListener のクリーンアップ漏れによるメモリリーク
- ▸✅ debounce / throttle の適用タイミング
学習目標をチェックリストとして持ち、すべて答えられるようになったらレッスンを閉じてください。
イベントシステム
核心を一言で
イベント = ユーザーが何かをしたときに発生するシグナル。クリック・キー入力・スクロール・マウス移動など。JSがこのシグナルを受け取って動作します。
よく使うイベント10種
イベントリスナー
> 💡 インラインの onclick="..." は古い書き方です。addEventListener が推奨 — 複数のハンドラーを登録でき、削除も可能。
イベントオブジェクト
デフォルト動作のキャンセル
イベントの伝播 — バブリング
イベントは子から親へと上方向に伝播します。これがバブリングです。
停止するには:
イベント委譲 — 効率的なパターン
各 <li> に1,000個のリスナー?非効率です。代わりに親に1つだけ:
バブリングのおかげで親が子のクリックを検知できます。メモリと性能の両方が向上し、動的に追加された子要素も自動的に処理されます。
debounce・throttle — 過剰な呼び出しを防ぐ
検索フォームでは入力が終わってから300ms後に1回だけAPIが呼ばれます。1,000回の入力 → 1回の呼び出し。
まとめ
- ▸
addEventListener('type', handler)が標準 - ▸
e.preventDefault()でデフォルト動作をブロック - ▸
e.stopPropagation()でバブリングをブロック - ▸イベント委譲で動的な子要素を効率的に処理
- ▸debounce・throttle でパフォーマンスを最適化
⚡ 実際に試してみよう — イベントシステム (mock EventTarget)
ブラウザのsandbox制約により、*mock EventTarget* を使ってaddEventListener・dispatchEvent・preventDefault・バブリングをデモしています。
✏️ JS 코드
📟 コンソール出力
▶ 実行ボタンを押してください
⚠️ ブラウザのサンドボックスで実行 — console.log()のみ対応、alert/fetchは不可
🤖 AIにこう聞いてみましょう
このレッスンの概念を知ることで、AIに具体的に指示できるようになります。漠然とした「直して」ではなく、語彙を持ったリクエスト — それがトークン節約の出発点です。
- ▸「このクリックイベントにdebounce 300msを適用して」
- ▸「このイベントハンドラーにクリーンアップ (return () => removeEventListener) も追加して」
なぜトークンを節約できるのか
概念を知らないと、AIの回答を受け取った後に「それって何ですか?」と再度質問しなければなりません。その「再質問」がトークンを消費します。概念を一度理解しておけば、会話が一度で終わります。