【jQuery】jQueryで後から追加した要素にイベントを設定させる方法

jQuery

動的に要素を追加した際に、うまくイベント発火ができない場合があるので、備忘録として記述します。

jQueryで後から追加した要素にイベントを設定するには、イベントデリゲーションを使用します。on()メソッドを使って、親要素にイベントをバインドすることで、後から追加された要素にもイベントを適用できます。以下はその例です。

OKな例

// 例えば、#parentというIDの要素内の新しい要素にクリックイベントを設定する
$('#parent').on('click', '.child', function() {
    alert('子要素がクリックされました!');
});

// 新しい要素を追加する例
$('#parent').append('<div class="child">新しい子要素</div>');

NGな例

// 既存の要素に直接イベントを設定すると、ページ読み込み時に存在する要素にしか適用されません。
$('#.child').on('click', function() {
    alert('子要素がクリックされました!');
});

// 新しい要素を追加する例
$('#parent').append('<div class="child">新しい子要素</div>');

動作例とサンプルソース

イベントデリゲーションの例

イベントデリゲーションのサンプル

既存の子要素
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>イベントデリゲーションの例</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script>
        $(document).ready(function() {
            $('#parent').on('click', '.child', function() {
                alert('子要素がクリックされました!');
            });

            // 新しい要素を追加するボタン
            $('#addElement').on('click', function() {
                $('#parent').append('<div class="child">新しい子要素</div>');
            });
        });
    </script>
</head>
<body>
    <h1>イベントデリゲーションのサンプル</h1>
    <div id="parent">
        <div class="child">既存の子要素</div>
    </div>
    <button id="addElement">新しい子要素を追加</button>
</body>
</html>

著者プロフィール
この記事を書いた人
ロジャー

Webアプリ開発を20年近く経験し、管理職なった今も時々ソースをいじるメインは営業職の管理者。もうすぐ40代。最近は、AIを活用して少しでも仕事やプライベートを面白くしていきたいと考えているおっさんです。困った事もAIなら解決してくれるはず!?

ロジャーをフォローする
jQueryシステム開発
ロジャーをフォローする
タイトルとURLをコピーしました