2014-09-18 88 views
0

我有这样的感觉,我的问题是非常愚蠢的,但我无法修复它。我在一个容器中有两个div,其中一个默认隐藏。当鼠标移到父div上时,我想用slideDown显示隐藏的div,并隐藏另一个div。当我将鼠标从div上移到bottom时,它会很好地工作,但如果我从底部移动鼠标,它会上下滑动一段时间。在这里,我有一个小提琴:jQuery mouseenter/mouseleave问题

[编辑]

我忘了说,我需要这与动态创建的div工作。

http://jsfiddle.net/7gva4fad/

jQuery(document).on({ 
 
    mouseenter: function() { 
 
     jQuery(this).find('.msg').hide(); 
 
     jQuery(this).find('.conv').slideDown(300);   
 
    } 
 
}, ".tooltip"); 
 

 
jQuery(document).on({ 
 
    mouseleave: function() { 
 
     jQuery(this).find('.conv').slideUp(300); 
 
     jQuery(this).find('.msg').show(); 
 
    } 
 
}, ".tooltip");
.tooltip{ 
 
    width: 250px; 
 
    height: 30px; 
 
    border: 1px solid #000; 
 
} 
 
.conv{ 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
 
<div class="tooltip"> 
 
    <div class="conv">Hello again</div> 
 
    <div class="msg">Hello world</div> 
 
</div>
任何想法完全理解。

+0

通常考虑将相关代码包含在消息正文中,并提供jsfiddle链接。这可以确保您的问题在将来即使您的代码不再托管在jsfiddle上仍然适用。 – 2014-09-18 19:38:57

+0

将鼠标悬停在元素上时,它立即隐藏'.msg',父容器('.tooltip')突然变为0的高度,这意味着鼠标离开元素并触发离开函数。 – JRulle 2014-09-18 19:43:54

+0

谢谢@WoodrowBarlow,我会记住这一点(: – Cassandra 2014-09-18 19:49:26

回答

0

如果先隐藏的.msg DIV的mouseleave事件被称为,因为在.tooltip DIV具有高度0

尝试是这样的:

jQuery(document).on({ 
    mouseenter: function() { 
     jQuery(this).find('.msg').stop(false, true).slideUp(300); 
     jQuery(this).find('.conv').stop(false, true).slideDown(300);   
    } 
}, ".tooltip"); 

jQuery(document).on({ 
    mouseleave: function() { 
     jQuery(this).find('.conv').stop(false, true).slideUp(300); 
     jQuery(this).find('.msg').stop(false, true).slideDown(300); 
    } 
}, ".tooltip"); 

http://jsfiddle.net/7gva4fad/2/

+0

我结束了使用你的解决方案,因为它适合我的项目(:并且不能使用'on({hover'和我需要它,因为我的div是动态创建的。你的答案完美无缺,谢谢( – Cassandra 2014-09-18 20:11:54

+1

我刚换了你的解决方案尽可能少;)但谁给了我-1,为什么? – algorhythm 2014-09-18 20:13:35

1

jQuery(function($) { 
 

 
    $('.tooltip').hover(function() { 
 
     $('.msg, .conv', this).stop().slideToggle(); 
 
    }); 
 
    
 
});
.tooltip{ 
 
    width: 250px; 
 
    border: 1px solid #000; 
 
} 
 
.conv{ 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="tooltip"> 
 
    <div class="conv">Hello again</div> 
 
    <div class="msg">Hello world</div> 
 
</div>

+0

它的工作原理非常完美(:,只是一个问题,'hover'和'mouseenter' /'mouseleave'有什么区别?哪一个更好?非常感谢你(: – Cassandra 2014-09-18 19:57:23

+0

@Cassandra'.hover()'方法(NB:* not * '.on('hover'...)'!)是* .on *'mouseenter mouseleave'事件监听器的确切副本* – 2014-09-18 19:58:42

+0

同样,您可以使用'$(this).bind('mouseenter ','mouseleave')',很确定那里没有真正的区别。 – Dpeif 2014-09-18 19:59:54