2015-02-09 47 views
5

我有这个网站检查光标是否在元素的父

<div class='parent'> 
    <div class='child'></div> 
</div> 

我想添加一个鼠标悬停和鼠标移开事件parent元素,但问题是当光标悬停child elemet它触发mouseout事件虽然acually仍在parent元素内。 我该如何避免这种情况,只有在光标离开parent项目时才会触发mouseout事件。

$(body).on('mouseover', '.parent' , function(){ /* do somthing */}); 
$(body).on('mouseout', '.parent' , function(){ /* do another somthing */}); 
+0

可以添加你的CSS代码?在父级添加显示块并检查 – 2015-02-09 12:45:40

回答

3

使用mouseentermouseleave代替mouseovermouseout这将解决您的问题。

$(document).on('mouseenter', '.parent' , function(){ 
    console.log("Mouse Enter"); 
}); 
$(document).on('mouseleave', '.parent' , function(){ 
     console.log("Mouse Leave"); 
}); 

不要使用stopPropagation()因为The Dangers of Stopping Event Propagation

Demo

1

你需要停止event对孩子的propagation

$(body).on('mouseover', '.child' , function(e){ 
    e.stopPropagation(); 
}); 
$(body).on('mouseout', '.child' , function(e){ 
    e.stopPropagation(); 
}); 
0

使用的mouseenter /鼠标离开事件,而不是鼠标悬停/鼠标移开:

$(body).on('mouseenter', '.child' , function(e){ 

}); 
$(body).on('mouseleave', '.child' , function(e){ 

}); 
+0

此答案如下所示:http://jsfiddle.net/ZCWvJ/600/ – 2015-02-09 12:56:09

+0

没有区别。这里的关键是你停止事件传播(这是我的答案,你似乎偷了)。 – mattytommo 2015-02-09 13:04:17

+0

是的,你是对的,我只是复制了你的错误代码,并改变了事件名称,忘记删除愚蠢的e.stopPropagation调用。感谢提醒。 – 2015-02-09 16:30:32