jQuery悬停在子元素上会产生奇怪的效果

时间:2009-10-08 18:13:15

标签: jquery events dom event-bubbling

我有这个标记(简化):

<div class='item'>
  <a> one link </a>
  <a class='trash'><img src='trash.png'/></a>
</div>

我在鼠标进入时突出显示div,并显示(否则隐藏)'垃圾'链接(它就像一个小垃圾桶),以便用户可以删除该链接。

我不能使用'悬停'效果,因为我需要它们是实时事件。所以我正在做mouseover和mouseout。这是代码:

$('div.link').live('mouseout', function(e){
        console.log(e)
        if(e.target == this){
            $(this).removeClass('hover');
            $(this).children('a.trash').fadeOut();
        }
    });

(鼠标结束时完全相反)。

动画看起来很古怪,我做错了什么?

非常感谢!

1 个答案:

答案 0 :(得分:13)

当鼠标进入和离开任何子元素时,也会触发mouseovermouseout事件。请尝试使用mouseentermouseleave事件。

不幸的是,live方法目前不支持这些方法。添加/删除链接时,您必须手动绑定它们。

function toggleDelete() {
      $(this)[($(this).hasClass('hover') ? 'remove' : 'add') + 'Class']('hover');
      $(this).find('a.trash').toggle();
}

$('div.link').bind('mouseenter, mouseleave', toggleDelete);

$('.add').click(function(e) {
    var link = $('<a />').addClass('link');
    link.bind('mouseenter, mouseleave', toggleDelete);
    $('.parent').append(link);
});