2015-02-09 13 views
5

Mam to htmlSprawdź, czy kursor znajduje się wewnątrz elementu rodzica

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

Ja wanna dodać mouseover i mouseOut zdarzenia parent elementu, ale problem jest, gdy unoszą kursor child elemet pożary mouseOut imprezę mimo że acually nadal wewnątrz elementu parent. jak mogę tego uniknąć, aby zdarzenie mouseout było uruchamiane tylko wtedy, gdy kursor opuszcza obiekt parent.

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

można dodać kod CSS? dodać blok wyświetlania w rodzica i sprawdzić –

Odpowiedz

3

użytkowania mouseenter i mouseleave zamiast z mouseover i mouseout, które rozwiążą twój problem.

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

Nie używaj stopPropagation() ponieważ The Dangers of Stopping Event Propagation.

Demo

1

Trzeba zatrzymać propagation z event na dziecko:

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

Stosować mouseenter/mouseLeave imprez zamiast mouseover/odsunięciu myszy:

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

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

}); 
+0

Ta odpowiedź jest zilustrowana tutaj: http://jsfiddle.net/ZCWvJ/600/ –

+0

Nie ma różnicy. Kluczem jest to, że zatrzymujesz propagację zdarzeń (co jest moją odpowiedzią, którą pozornie ukradłeś). – mattytommo

+0

Tak, masz rację, właśnie skopiowałem zły kod i zmieniłem nazwy wydarzeń, po prostu zapomniałem usunąć głupie wywołania e.stopPropagation. Dzięki za przypomnienie. –

Powiązane problemy