one()
イベント委任で使用する方法はありますか? バインド時に作成されていないDOM要素に適用されるようにしますかon()
?live()
3 に答える
はいあります:
// added in jQuery 1.7
// .one( events [, selector] [, data], handler(eventObject) )
$("div").one("click", "span", function (e) {
$(this).hide();
});
とまったく同じ方法で.on
$("#to-bind-to").one('event-type', 'delegated-selector', eventFunction);
はい。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 で何か他のものがクリックされた場合、イベント ハンドラーが削除され、再度起動することはないと思います。これは当てはまりません。イベント ハンドラーは、 が#foo
1 回クリックされるまで存在します。
デモンストレーションについては、このフィドルを参照してください。