Jquery mouseenter/mouseleave忽略覆盖元件

Jquery mouseenter/mouseleave忽略覆盖元件,jquery,mouseevent,mouseenter,mouseleave,Jquery,Mouseevent,Mouseenter,Mouseleave,似乎,mouseenter/mouseleave方法不仅在鼠标坐标进入目标的客户端矩形时触发,而且在另一个元素发现或覆盖目标时触发。这是一个问题,因为在我的mouseenter回调中,我想在目标上显示另一个元素E。我还希望E在鼠标移动后消失。您可以将其视为重叠的工具提示 但是,当我将鼠标移到目标上时,鼠标指针被触发,元素E将覆盖它。此覆盖范围将进一步触发一个鼠标删除事件,因此E将消失。这将进一步触发一个鼠标指针事件,因此E将再次出现。。。。。这真让人头疼 因此,基本上,我想知道是否有一个版本的m

似乎,mouseenter/mouseleave方法不仅在鼠标坐标进入目标的客户端矩形时触发,而且在另一个元素发现或覆盖目标时触发。这是一个问题,因为在我的mouseenter回调中,我想在目标上显示另一个元素E。我还希望E在鼠标移动后消失。您可以将其视为重叠的工具提示

但是,当我将鼠标移到目标上时,鼠标指针被触发,元素E将覆盖它。此覆盖范围将进一步触发一个鼠标删除事件,因此E将消失。这将进一步触发一个鼠标指针事件,因此E将再次出现。。。。。这真让人头疼

因此,基本上,我想知道是否有一个版本的mouseenter/mouseleave只关心鼠标是否进入或离开目标的客户端矩形,而不管目标是否被覆盖

更新:@arunopjohny创建了一个JS提琴来说明这个问题。请参阅评论

尝试

jQuery(function ($) {
    $('#target').hover(function () {
        var $target = $(this);
        clearTimeout($target.data('hoverTimer'));
        $('#e').show();
    }, function () {
        var $target = $(this);
        var timer = setTimeout(function () {
            $('#e').hide();
        }, 200);
        $target.data('hoverTimer', timer);
    });

    $('#e').hover(function () {
        clearTimeout($('#target').data('hoverTimer'));
    }, function () {
        $(this).hide();
    });
});

演示:

在相关问题中找到了完美的解决方案:


“指针事件:无;”属性将禁用元素的任何鼠标事件。更重要的是,事件将“穿过”它下面的元素。在我的问题中,对叠加元素E使用此选项可以解决问题。

您可以将叠加元素作为目标的后代放置,以便不会触发mouseenter/mouseleave事件。问题是目标是内联的,而E是块级的。将E作为目标的后代将使浏览器疯狂@Arunpjohnying是否显示您的problem@ArunPJohny没错,谢谢你创造了这个。正如您所看到的,当一系列的(mouseenter、mouseleave、mouseenter)被触发时,出现了一个小故障,而不是单个的mouseenter。这解决了当target和E具有完全相同的位置和大小时的问题。但如果E大于目标值,则当您将鼠标移出目标值时,E不会消失。@user690421您能否帮助在fiddleYes中重新创建问题。这说明了问题所在。但是,再仔细想想,这可能是我们想要的行为。@user690421我们想要的行为是什么?找到了解决方案,正如我在自己的回答中提到的。谢谢你的讨论。这是小提琴: