2015-02-09 10 views
5

ho questo htmlControllare se il cursore è madre di elemento all'interno

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

Voglio aggiungere un passaggio del mouse e mouseOut eventi per parent elemento, ma, il problema è quando il passaggio del mouse il cursore child elemet spara evento mouseout anche se acually ancora all'interno dell'elemento parent. come posso evitare di fare in modo che l'evento mouseout si attivi solo quando il cursore lascia l'elemento parent.

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

è possibile aggiungere il codice CSS? aggiungi il blocco di visualizzazione in parent e verifica –

risposta

3

Usa mouseenter e mouseleave invece di mouseover e mouseout che risolverà il tuo problema.

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

Non utilizzare stopPropagation() perché The Dangers of Stopping Event Propagation.

Demo

1

è necessario fermare la propagation del event sul bambino:

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

Utilizzare MouseEnter/eventi MouseLeave invece di mouseover/mouseout:

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

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

}); 
+0

Questa risposta è illustrata qui: http://jsfiddle.net/ZCWvJ/600/ –

+0

Non c'è differenza. La chiave qui è che stai fermando la propagazione dell'evento (che è ciò che la mia risposta fa che tu apparentemente rubi). – mattytommo

+0

Sì, hai ragione, ho appena copiato il codice errato da te e cambiato i nomi degli eventi, ho appena dimenticato di rimuovere le stupide chiamate e.stopPropagation. Grazie per averlo ricordato. –

Problemi correlati