要素は、マウスが上にあるときにリスト項目に追加され、マウスが離れると切り離されます。
要素がクリックされると切り離され、それが含まれていたリスト項目が DOM から削除されます。
私のHTML:
<div id="cart">
<ul>
<li> <a data-item="a">item A</a></li>
<li> <a data-item="b">item B</a></li>
<li> <a data-item="c">item C</a></li>
<li> <a data-item="d">item D</a></li>
<li> <a data-item="e">item E</a></li>
<li> <a data-item="f">item F</a></li>
<li> <a data-item="g">item G</a></li>
<li> <a data-item="h">item H</a></li>
</ul>
</div>
そして私のJavaScript:
function plugin(node, opts){
var self = this;
delKnob = $('<i />').text('×');
this.cart = $(node);
delKnob
.on('click', function(){
var item = $(this).parent().find('[data-item]').data('item');
$(this).detach();
self.remove(item);
});
this.cart
.on('mouseenter', 'li', function(){
delKnob.appendTo(this);
})
.on('mouseleave', 'li', function(){
delKnob.detach();
});
}
plugin.prototype = {
remove: function(item){
var li = this.cart.find('[data-item="' + item + '"]').closest('li');
li.addClass('removing');
setTimeout(function(){
li.remove();
}, 500);
}
};
new plugin('#cart');
私のコードに似たフィドルの例を設定しました。
問題は、要素が発火前に切り離されているにもかかわらず、この要素のクリック リスナーもリスト アイテムと共に削除される$.remove()
ため、影響を受けないことです。
ここで何が間違っていますか?