jquery - 为什么执行此悬停的 mouseenter 部分,而不执行 mouseleave?

标签 jquery hover mouseevent

我正在使用this syntax option用于 jquery 悬停。

这是我的代码:

$('mySelector')
    .hover(
        function(){
            $(this).html('<img src="images/myImage2.png" height="23" width="24" />');
        },
        function(){
            $(this).html('<img src="images/myImage1.png" height="23" width="24" />');
        }
    );

mySelector 引用的元素的原始文本是 mouseleave 选项 - $(this).html('<img src="images/myImage1.png" height="23" width="24" />');

第一个用于 mouseenter/mouseover 的处理程序工作正常。但是第二个处理程序,用于 mouseleave/mouseout(应该恢复原始图像),永远不会执行。当我在 firebug 中跟踪它时,触发了 mouseover 事件,但未到达第二个“function()”。

编辑:

为了清楚起见,我的 html 代码是这样的:

<div id="results">
   <span class="imageClass"><img src="images/myImage1.png" height="23" width="24" /</span>
</div>

然后我的选择器是 "#results .imageClass"

最佳答案

此问题的原因可能是触发 mouseenter 的元素。事件(即 <img> 节点)在触发 mouseleave 之前从 DOM 中删除事件。该事件由mySelector捕获并处理。的事件处理程序,但是 <img>是事件的实际来源。因此,mouseleave 是有道理的。事件不是由新的 <img> 触发的,因为鼠标一开始就没有进入过它。

澄清一下:事件处理程序绑定(bind)到的 DOM 节点 ( mySelector ) 与首先触发事件的节点 ( <img> ) 不同。因为<img>该事件没有自己的处理程序,该事件将 bubble up through the DOM tree直到它遇到一个节点(在本例中为 mySelector )。

事实证明adeneo's solution确实有效,尽管他/她的答案不准确。这是一个工作示例: jsbin.com/ikolog

有用的资源:

关于jquery - 为什么执行此悬停的 mouseenter 部分,而不执行 mouseleave?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11411085/

相关文章:

jquery - 如何使用JQuery确定键盘输入的语言

javascript - 禁用滚动功能

HTML CSS 格式化菜单 block /悬停背景

javascript - react Hook useState 与数组导致缺少渲染调用

javascript - jquery : animate list scrollLeft/scrollRight on mouse wheel

javascript - 单击与单击传入元素

javascript - jquery 检查父元素中是否有特定文本,如果有则在特定的预先存在的子元素之后添加子元素

javascript - Jquery:当悬停在菜单项上时,显示文本

css - 如何使 CSS 工具提示在原始元素上严格保持不变,而不是在新生成的工具提示上?

javascript - 更改鼠标悬停和鼠标移出时的按钮?