jQuery при наведении курсора на дочерние элементы создает причудливые эффекты

У меня есть эта разметка (упрощенная):

<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();
        }
    });

(наведение мыши делает прямо противоположное).

Анимация выглядит причудливо, что я делаю не так?

Большое спасибо!


person Pablo Fernandez    schedule 08.10.2009    source источник


Ответы (1)


События mouseover и mouseout также запускаются, когда мышь входит в любой дочерний элемент и покидает его. Вместо этого попробуйте использовать события mouseenter и mouseleave.

К сожалению, метод 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);
});
person bendewey    schedule 08.10.2009