即使在 stopPropagation 之后,嵌套元素也会触发父事件

Nested elements firing parent's event even after stopPropagation

我有一个包含图像(子)和跨度(子)的锚标记(父)。有一个下拉列表 div,我想在用户 mouseover 上锚标签时显示它。

当用户鼠标第二次悬停在该锚标记上时,该下拉菜单应该隐藏

我在锚标记上添加了 mouseover 事件到 toggle 下拉菜单。但它不起作用。我什至在子元素上添加了 stopPropogation()

当我 mouseover 在锚标签上时,显示下拉菜单。但是如果我将鼠标移到 spandiv 上,下拉菜单会隐藏。

这是工作 JSfiddle

这是HTML:

<a href="#header-cart" id="custom_headercart" class="skip-link skip-cart" style="border: 1px solid black">    
    <img src="https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcRTClkntD56hOwVYr-e1blK4kXVusYujzM-ErrlL6QhonsYjqdK" alt="" width=18>
    <span>12</span>
 </a>

<div id="dropdown_div" style="display: none">
    Dropdown div content
</div>

这是jQuery

$("#custom_headercart").on("mouseover", function(){
    $("#dropdown_div").toggle();
})

$j("#custom_headercart span").mouseover(function(event){
 event.stopPropagation();
});

$j("#custom_headercart img").mouseover(function(event){
 event.stopPropagation();
});

编辑: 下拉菜单应显示和隐藏备用 mouseover。就像我第一次 mouseover 一样,它应该显示下拉菜单。然后,如果我移出(下拉菜单不应该隐藏)并再次 mouseover,那么它应该隐藏。

您正在将停止传播应用于父级,将其应用于子级,因为它可以防止“event bubbling”而不是“Event capturing

听起来您只需要使用 mouseenter 而不是 mouseover。这样你就不需要阻止子元素传播。

Here's a fiddle