jQuery 1.7以降jQuery.fn.on
、セレクターパラメーターを入力して使用する必要があります。
$(staticAncestors).on(eventName, dynamicChild, function() {});
説明:
これはイベント委任と呼ばれ、次のように機能します。staticAncestors
イベントは、処理する必要がある要素の静的な親 ( ) に関連付けられます。この jQuery ハンドラーは、この要素または子孫要素の 1 つでイベントがトリガーされるたびにトリガーされます。その後、ハンドラーは、イベントをトリガーした要素がセレクター ( dynamicChild
) と一致するかどうかを確認します。一致すると、カスタム ハンドラ関数が実行されます。
これより前は、次の方法を使用することをお勧めしましたlive()
。
$(selector).live( eventName, function(){} );
ただし、live()
は 1.7 で廃止さon()
れ、1.9 で完全に削除されました。live()
署名:
$(selector).live( eventName, function(){} );
on()
... 次の署名に置き換えることができます。
$(document).on( eventName, selector, function(){} );
たとえば、ページがクラス名dosomething
を持つ要素を動的に作成している場合、イベントを既に存在する親にバインドします(これがここでの問題の核心です。バインドするために存在するものが必要です。動的コンテンツ)、これは (そして最も簡単なオプション) ですdocument
。ただしdocument
、最も効率的なオプションではない可能性があることに注意してください。
$(document).on('mouseover mouseout', '.dosomething', function(){
// what you want to happen when mouseover and mouseout
// occurs on elements that match '.dosomething'
});
イベントがバインドされた時点で存在する親は問題ありません。例えば
$('.buttons').on('click', 'button', function(){
// do something here
});
に適用されます
<div class="buttons">
<!-- <button>s that are generated dynamically and added here -->
</div>