私はJSON要素を取得し、そのようなアイテムからリストを作成しています:
getTitles: function(data) {
data = data || {};
var list = [];
$.getJSON(
'/titles',
data,
function(data) {
$.each(data.data, function(key, val) {
list.Push(
'<li><a href="'+ val.href +'">'+ val.title +'</a><span class="count">'+ val.count +'</span></li>'
)
});
$('#title-items').html(list.join(''));
}
);
}
そして、次のようなa
要素のクリックイベントをバインドしています。
$('a').on('click', function(e) {
alert('clicked');
e.preventDefault();
});
古いa
要素はアラートを表示しますが、新しい要素はURLに従います。新しいイベントハンドラーは機能しません。どうすれば解決できますか?
live機能を取得するために正しいコードを使用していません。
$('#title-items').on('click', 'a', function(e) {
alert('clicked');
e.preventDefault();
});
#title-items
この例では)。 alldocument
要素を処理する場合は、ここでもa
を使用できます。on
)、thenサブセレクター(a
)、イベントのコールバック関数を渡します。これで、click
イベントが#title-items
、要素がa
要素かどうかを確認し、そうであればコールバックを起動します。
イベントの委任を使用して、任意の時点でDOMに存在するイベントでトリガーされたイベントをキャプチャします。
$(<root element>).on('click', 'a', function(e) {
alert('clicked');
e.preventDefault();
});
[〜#〜] update [〜#〜]-この例では、<root element>
は、バインド時にDOMに存在する、バインド先のリンクの祖先です。
基本的な考え方は、まだDOMにないDOM要素にイベントハンドラーを接続できないため、先祖要素にイベントハンドラーを接続し、イベントが先祖要素にバブルアップするのを待つというものです。イベントが先祖イベントに到達すると、event.target
プロパティをチェックして、元々クリックされていた要素を確認します。
arrive.js ライブラリを使用できます(内部で MutationObserver を使用します)。
document.arrive('a', function(){
// 'this' refers to the newly created element
var newElem = this;
});