1. ホーム
  2. jquery

[解決済み] on` と `live` や `bind` はどう違うのですか?

2022-04-22 03:53:46

質問

jQueryの場合 v1.7 という新しいメソッドが追加されました。 on が追加されました。 ドキュメントより。

「.on()メソッドは、jQueryオブジェクトの現在選択されている要素セットにイベントハンドラをアタッチします。jQuery 1.7では、.on()メソッドはイベントハンドラのアタッチに必要なすべての機能を提供します'。

とは何が違うのでしょうか? livebind ?

解決方法は?

on() は、jQueryのイベントバインディング関数のほとんどを1つに統合する試みです。 これには livedelegate . jQueryの将来のバージョンでは、これらのメソッドは削除され、以下のメソッドのみとなります。 onone が残ります。

// Using live()
$(".mySelector").live("click", fn);

// Equivalent `on` (there isn't an exact equivalent, but with good reason)
$(document).on("click", ".mySelector", fn);

// Using bind()
$(".mySelector").bind("click", fn);

// Equivalent `on`
$(".mySelector").on("click", fn);

// Using delegate()
$(document.body).delegate(".mySelector", "click", fn);

// Equivalent `on`
$(document.body).on("click", ".mySelector", fn);

内部的には、jQueryは すべて これらのメソッド へのイベントハンドラ・セッターを省略したものです。 on() メソッドを使用し、今後はこれらのメソッドを無視して on :

bind: function( types, data, fn ) {
    return this.on( types, null, data, fn );
},
live: function( types, data, fn ) {
    jQuery( this.context ).on( types, this.selector, data, fn );
    return this;
},
delegate: function( selector, types, data, fn ) {
    return this.on( types, selector, data, fn );
},

参照 https://github.com/jquery/jquery/blob/1.7/src/event.js#L965 .