4

one()イベント委任で使用する方法はありますか? バインド時に作成されていないDOM要素に適用されるようにしますかon()?live()

4

3 に答える 3

4

はいあります:

// added in jQuery 1.7
// .one( events [, selector] [, data], handler(eventObject) )
$("div").one("click", "span", function (e) {
   $(this).hide(); 
});
于 2012-05-08T14:42:11.910 に答える
1

とまったく同じ方法で.on

$("#to-bind-to").one('event-type', 'delegated-selector', eventFunction);
于 2012-05-08T14:42:42.883 に答える
1

はい。jQuery.one()ドキュメントから:

jQuery 1.7 で導入された 2 番目の 2 つの形式は、デリゲートされた要素でイベントが最初に発生した後にハンドラーが削除されることを除いて、セレクターが何かに一致したかどうかにかかわらず、.on() と同じです。例えば:

    $("#foo").one("click", function() {
      alert("This will be displayed only once.");
    });
    $("body").one("click", "#foo", function() {
      alert("This displays if #foo is the first thing clicked in the body.");
    });

コードが実行された後、ID foo の要素をクリックすると、アラートが表示されます。その後のクリックは何もしません。

これは、フォームを使用すると、次のように$(el).one('click', '.selector', handler)機能することを意味します-イベントハンドラーは(DOMに存在する必要がある)にliveバインドされますが、イベントハンドラーは、その要素が存在するかどうかに関係なく、のクリックでのみ実行されますに電話します。el.selector.one()

編集:これに関するjQueryのドキュメントは間違っているようです-少なくとも、私が解釈する方法です。alert上記によると、

「これは、#foo が本文で最初にクリックされた場合に表示されます。」

これにより、最初にbody で何か他のものがクリックされた場合、イベント ハンドラーが削除され、再度起動することはないと思います。これは当てはまりません。イベント ハンドラーは、 が#foo1 回クリックされるまで存在します。

デモンストレーションについては、このフィドルを参照してください。

于 2012-05-08T14:45:53.303 に答える