2013-10-09 44 views
1

我有一个图像,当我把鼠标悬停在它上面的选项出现在它下面。当我转向他们隐藏的选项时。我已经设置了效果基本show不会发生,直到用户从父DIVjquery div隐藏时它不应该

$('.file-options').hide(); 
$('.file a img').mouseover(function(){ 
    $(this).closest('.file').find('.file-options').slideDown(); 
}); 
$('.file a img').closest('.file').mouseout(function(){ 
    $(this).find('.file-options').slideUp(); 
}); 

<div class="document"> 
    <div class="file"> 
    <a href="#"><img src="http://www.dermalog.com/images/pdf-icon.png" alt=""></a> 
    <div class="file-options showhouse-text"> 
     <a href="#" onclick="return confirm('Are you sure you want to delete this file?');" class="show-tooltip" data-html="true" data-placement="top" data-original-title="Delete File">D</a> 
     <a href="#" class="show-tooltip" data-html="true" data-placement="top" data-original-title="Edit File">E</a> 
    </div> 
    </div> 
</div> 

这里移开是的jsfiddle http://jsfiddle.net/5vAFh/2/

回答

4

<img>mouseout事件冒泡到.file元素,因此触发您的代码隐藏<div>。使用mouseleave事件(不给事件冒泡反应),而不是:

$('.file a img').closest('.file').mouseleave(function(){ 
    $(this).find('.file-options').slideUp(); 
}); 

Demo

+1

'$鼠标离开()'足够ISN'它呢? – mikakun

+1

为什么不是'$('。file:has(a img'))。mouseleave' –

+0

mouseout是如何做错的,mouseleave是对的? –

0

你可以这样做:演示http://jsfiddle.net/USBRy/

支票if(!$(this).is(':hover')) {

希望这会有所帮助:)

代码

$('.file-options').hide(); 

$('.file a img').mouseover(function() { 
    $(this).closest('.file').find('.file-options').slideDown(); 
}); 

$('.file a img').closest('.file').mouseout(function (e) { 
    if(!$(this).is(':hover')) { 
     $(this).find('.file-options').slideUp(); 
    } 
}); 
0

你几乎有..试试这个:(”文件 ')。

$('.file-options').hide(); 

$('.file').mouseover(function(){ 
    $(this).find('.file-options').slideDown(); 
}); 

$('.file').mouseout(function(e){ 
    if($(e.toElement).parents('.file').length < 1) { 
     $(this).find('.file-options').slideUp(); 
    }; 
}); 

http://jsfiddle.net/5vAFh/12/