如何删除下一个追加mouseleave?

时间:2015-02-10 11:55:33

标签: javascript jquery append

我的代码有问题;当我mouseenter一个元素时,工具栏会附加到此元素,但是当我从工具栏到元素mouseleave时,工具栏会再次附加。我该如何防止这种重新附加?

$('.el').on('mouseenter', function(e){

  var toolbar = $('<div class="toolbar"><span>leave toolbar to element</span></div>');  

    setTimeout(function(){
        toolbar.addClass('widget-over');
    },100);

    $('body').prepend(toolbar);

    toolbar.css({
        left:$('.el').offset().left,
        top:$('.el').offset().top - toolbar.height() - 20
    });

    $('.el').on('mouseleave',function(e){
        if ($(e.relatedTarget).closest(toolbar).length) return;
        toolbar.removeClass('widget-over');
        toolbar.remove();
    });

    toolbar.on('mouseleave',function(e){
        toolbar.remove();
    });
});

非常感谢社区的答案!完全Jeremy ThilleArun P JohnyJivings

  1. 问题小提琴 - &gt; Fiddle
  2. 解决方案小提琴 - &gt; Fiddle

1 个答案:

答案 0 :(得分:2)

问题是每次有mouseover时你都在创建事件处理程序。我把它们分开以使其更简单,这似乎已经解决了你的错误:

var toolbar = $('<div class="toolbar"><span>leave toolbar to element</span></div>');  
toolbar.on('mouseleave',function(e){
    toolbar.remove();
});    

var enter = function(e) {

    setTimeout(function(){
        toolbar.addClass('widget-over');
    },100);

    $('body').prepend(toolbar);

    toolbar.css({
        left: $el.offset().left,
        top: $el.offset().top - toolbar.height() - 20
    });    
};

var leave = function(e){
    if ($(e.relatedTarget).closest(toolbar).length) return;
    toolbar.removeClass('widget-over');
    toolbar.remove();
}

var $el = $('.el')
    .on('mouseenter', enter)
    .on('mouseleave', leave);

JSfiddle:http://jsfiddle.net/3r8wrumL/2/