このように、常に dom に存在する親要素に $.on をバインドできます。
$(document).on('click','.test', function() {
console.log('Test clicked');
});
注意:document
常に dom に存在する要素の任意の親に
置き換えることができ、親が近いほど良いです。
単純なイベント バインディングは、バインド時に DOM に既に存在する要素にイベント ハンドラーをバインドするため、click
機能しません。click
そのため、後で Ajax または jQuery を介して dom に動的に追加された要素では機能しません。そのためには、 を使用する必要がありますevent delegation
。そして、あなたは$.on
その目的のために使用することができます.
$.onのドキュメントを確認してください
使用できます$.live
が、$live は減価償却されます。代わりに $.on を使用してください。同じことを行う $.live と $.delegate の $.on の同等の構文
$(selector).live(events, data, handler); // jQuery 1.3+
$(document).delegate(selector, events, data, handler); // jQuery 1.4.3+
$(document).on(events, selector, data, handler); // jQuery 1.7+
この場合、イベント ハンドラは にバインドされdocument
ます。この場合、イベントは jQuery によって対象の要素に委譲されtest
ます。
アップデート
他のすべてのメソッドがフードの下を経由してメソッド$.on
を通過するため、すべてのイベント処理の目的で使用することをお勧めします。$.on
$.off
jQueryソースv.1.7.2からこれらの関数の定義を確認してください
bind: function( types, data, fn ) {
return this.on( types, null, data, fn );
},
unbind: function( types, fn ) {
return this.off( types, null, fn );
},
live: function( types, data, fn ) {
jQuery( this.context ).on( types, this.selector, data, fn );
return this;
},
die: function( types, fn ) {
jQuery( this.context ).off( types, this.selector || "**", fn );
return this;
},
delegate: function( selector, types, data, fn ) {
return this.on( types, selector, data, fn );
},
undelegate: function( selector, types, fn ) {
// ( namespace ) or ( selector, types [, fn] )
return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn );
}
これは、これらの便利なイベント ハンドラーにも当てはまります。
blur focus focusin focusout load resize scroll unload click dblclick mousedown
mouseup mousemove mouseover mouseout mouseenter mouseleave change select
submit keydown keypress keyup error contextmenu
すべてのメソッドが使用$.on
していることと、$.off
それ自体を確認できます。したがって$.on
、ほとんどの場合、それほど重要ではありませんが、少なくとも関数呼び出しを保存できます。