3.

イベント

編集

本稿は jQuery のイベントに関する記事です。イベントとは、jQuery で「何をきっかけにしてコードを実行するか」を指定する仕組みのことです。「クリックイベント」「マウスオーバーイベント」「マウスアウトイベント」などがあります。

子ページから個別のイベントを選択してください。

本ページの子ページ

イベント登録の基本

現代の jQuery では .on() でイベントを登録するのが推奨です。

// DOM 構築後に実行
$(function() {
  // ボタンクリック
  $(".btn").on("click", function() {
    $(this).toggleClass("is-active");
  });

  // フォーム送信
  $("form#contact").on("submit", function(e) {
    if (!$("#name").val()) {
      e.preventDefault();    // 送信中止
      alert("名前は必須です");
    }
  });
});

主なイベントの一覧

分類イベント用途
マウスclick / dblclickクリック・ダブルクリック
mousedown / mouseupボタン押下・離す
mouseover / mouseoutマウスが乗る/離れる (子要素にも反応)
mouseenter / mouseleave子要素では反応しないバージョン
mousemoveマウス移動
キーボードkeydown / keyup / keypressキー入力
フォームsubmitフォーム送信
change値変更
input入力中
focus / blurフォーカス取得・喪失
ウィンドウresize / scrollウィンドウ変化
load / unload読込・離脱
タッチtouchstart / touchend / touchmoveスマホ操作
準備完了$(function(){...})DOM 構築完了 (推奨形)

イベントハンドラ内で使える this / event

$(".list a").on("click", function(e) {
  // this: イベント発生元の生 DOM 要素
  const $a = $(this);

  // e: イベントオブジェクト
  e.preventDefault();   // 既定動作キャンセル (リンク遷移)
  e.stopPropagation(); // 親へのイベント伝播を止める

  console.log(e.type, e.target, e.currentTarget, e.pageX, e.pageY);
});

イベント委任 (Delegated Events)

動的に追加された要素にもイベントを効かせたい場合、親要素に委譲します。

// .list の中の .item へのクリックを委任
$(".list").on("click", ".item", function() {
  $(this).addClass("selected");
});

// document 全体に委任 (最後の手段)
$(document).on("click", ".dyn", function() { ... });

イベントの解除と一度きり

メソッド用途
.off("click")そのイベントの全ハンドラを解除
.off("click", fn)特定ハンドラのみ解除
.one("click", fn)1 回だけ発火するハンドラ
名前空間 click.myapp.on("click.myapp", fn) / .off(".myapp") で機能単位の解除

手動で発火する

$(".btn").trigger("click");      // 全イベント連鎖を含めて発火
$(".btn").triggerHandler("click"); // ハンドラのみ呼ぶ (既定動作・伝播なし)

注意点

  • 動的に追加された要素にイベントを付けるなら委任 (delegated event) を使う
  • .live() / .bind() は古い API。.on() に統一
  • イベントを大量に登録するとパフォーマンス低下。親への委任 1 つで代替できないか検討
  • scroll / resize / mousemove高頻度発火setTimeoutrequestAnimationFrame でスロットリング
  • 新規プロジェクトでは標準 DOM の addEventListener + 委任パターンで十分なことが多い
  • 外部入力を .html() 経由でハンドラ内に流し込まない (XSS の温床)

関連

編集
Post Share
子ページ
  1. クリックイベント
  2. マウスオーバーイベント
  3. マウスアウトイベント
同階層のページ
  1. 基本形
  2. セレクタ
  3. イベント