【问题标题】:JQuery hover mouseenter event fired even though I left the div即使我离开了 div,JQuery 悬停 mouseenter 事件也会触发
【发布时间】:2011-09-16 10:22:19
【问题描述】:

我有 2 个 div,定义如下:

<div id="feedsInfo"></div>  

<div id="feeds">
<ul>
<li><p id="a">A</p></li>
<li><p id="b">B</p></li>
<li><p id="c">C</p></li>
</ul>
</div> 

我添加悬停事件如下:

$("#feeds p").filter(function(){  
 return ($(this).attr('id') == 'a' || 
                    $(this).attr('id') == 'b' || 
                    $(this).attr('id') == 'c' 
                )})  
.hover(function(e){  
$(this).css('background-color','red');  
 $('#feedsInfo').css('background-color','red');

      << dynamically append <a href> tags to div id='feedsInfo' >>

},function(e){  
$("#feedsInfo").children().remove();    
  $(this).css('background-color','blue');   
  $('#feedsInfo').css('background-color','blue');  
}):

问题是我仍然可以在 div id='feedsInfo' 中看到链接标签,如果我只是在列表“A”“B”“C”上挥手(鼠标现在位于其他地方。简而言之,它应该会触发mouseleave 事件),即使它们在 mouseenter 或 mouseleave 事件中将颜色从红色变为蓝色,从蓝色变为红色。

请解释一下当我只是浏览列表并且鼠标没有悬停在列表'A''B''C'上时如何从div中删除链接标签

【问题讨论】:

    标签: jquery hover


    【解决方案1】:

    试试这个:

    $("#feedsInfo").html('');
    

    【讨论】:

    • 没有更好的运气。还是同样的问题。
    【解决方案2】:

    了解您使用的是哪个浏览器/版本以及 jQuery 的哪个版本会很有帮助。

    改用$("#feedsInfo").empty();

    如果这不起作用,您可能会遇到特定于您的情况的浏览器怪癖。作为一种变通方法,您可以尝试将hover 事件处理程序放在p 标记的父容器上,这将清空#feedsInfo 块。一旦鼠标离开p 节点,鼠标通常会进入父节点,因此这可能适用于您的情况。

    【讨论】:

    • 我使用 jQuery v 1.5.2 和浏览器 Mozilla 3.0.1 和 IE 7。我尝试将悬停事件插入 p 标签的父容器,但仍然没有运气。是否发生了某种事件冒泡?
    • 这可能是一个事件冒泡问题,但如果没有实时测试,真的很难弄清楚。你有一个网站,我们可以在其中看到这一点吗?另外,“ 标签添加到 div id='feedsInfo' >>” 的代码是什么样的?答案可能在于您如何插入锚标记。
    • 这里是 标签到 div id='feedsInfo' >> $('',{href: entry.link, target: ' _blank',文本:entry.title }).appendTo($('
    • ').appendTo($('#feedsInfo')));
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签