私はこのコードを持っています:
$('.self_delete').on('ajaxSuccess', function(event, xhr, settings) {
json = jQuery.parseJSON(xhr.responseText);
if ($(this).attr('href') == json.delete_url ) {
alert('going to delete');
$(this).closest($(this).data('parent-selector')).remove();
} else {
alert('not this one!');
}
});
これは、すでにページ上にある要素に対して完全に機能します。しかし、新しい要素を動的に追加して.self_delete要素をクリックすると、ajaxSuccessはトリガーされません(ただし、リンクは機能します)。
ページにすでにいくつかのアイテムがある場合は、別のアイテムを追加してから、最新のアイテムをクリックしてイベントをトリガーします。アラートは「これではありません!」です。既存の要素に対してトリガーされますが、新しい要素に対してはトリガーされません。
何か案は?----編集-----私は次のようにデリゲートを使用します:
$('#lists').on('ajaxSuccess', '.self_delete', function(event, xhr, settings) {
json = jQuery.parseJSON(xhr.responseText);
if ($(this).attr('href') == json.delete_url ) {
alert('going to delete');
$(this).closest($(this).data('parent-selector')).remove();
} else {
alert('not this one!');
}
});
これで、ページがリロードされても、イベントが発生することはありません。ただし、$('#lists .self_delete')を実行すると、a.self_deleteの配列が返されるため、セレクターは適切です。(眠りにつく、私が目を覚ますときに誰かが提案を持っていることを願っています!thx!)
---編集2-----これを追加した場合:
$('#lists').on('click', '.self_delete', function(event) {
alert('going to delete from click');
});
アラートは発生します。すべての場合。したがって、基本的に、.on()はajaxSuccessイベントを登録できないようです。私はこれをグーグルで検索しようとしましたが、.on()に関連するものを検索することは不可能なことを見逃しているようなものであり、そのような一般的な単語です:-S