当鼠标悬停在元素上时,元素被附加到列表项中,并在鼠标离开时分离。
单击该元素时,它会被分离,然后它所在的列表项会从 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()
触发前被分离,所以它不应该受到影响。
我在这里做错了什么?