【发布时间】:2017-10-21 02:57:25
【问题描述】:
红色方块是具有“父”类的容器的一部分。如果我将鼠标悬停在那个红色方块上,它就会消失。但为什么?我预计它不应该。
预期的行为:它不会消失,因为红色方块是“.parent”容器的一部分,并且我已经明确指出,mouseout 事件发生在该容器上。
有一个建议,这个问题是重复的
JavaScript mouseover/mouseout issue with child element
在某种程度上 - 是的,但我认为这个问题提供了价值,因为它不仅提供了解决方案(“你可以试试这个”),而且还解释了为什么你应该使用它以及为什么初始解决方案不起作用正如它应该的那样。
<span class="parent">Hover mouse over this text<br></span>
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script>
function removeSquare()
{
$(this).find(".kvadrat").remove();
}
function addSquare()
{
$(this).append("<span style='display:inline-block;width: 50px;height: 50px;background-color:red' class='kvadrat'></span>");
$(this).on("mouseout", removeSquare);
}
$(".parent").on("mouseover", addSquare);
</script>
【问题讨论】:
-
你已经使用了 $(this).on("mouseout", removeSquare);这就是它消失的原因
-
但它不应该。 Square 是 $(this) 的一部分。
-
顺便说一句,您的代码也有另一个问题:每次触发
mouseover事件时,您都在添加mouseout处理程序的另一个副本。如果您不断将鼠标移入和移出父元素,最终会在其上产生数十个冗余的mouseout处理程序。
标签: javascript jquery events dom-events jquery-events