2015-02-09 28 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