Qual è la differenza tra gli eventi mouseover e mouseenter?


153

Ho sempre usato l' mouseoverevento, ma durante la lettura della documentazione di jQuery ho trovato mouseenter. Sembrano funzionare esattamente allo stesso modo.

C'è una differenza tra i due e, in tal caso, quando dovrei usarli?
(Vale anche per mouseoutvs mouseleave).

Risposte:


118

Puoi provare il seguente esempio dalla pagina del documento jQuery . È una bella demo interattiva che lo rende molto chiaro e puoi davvero vederlo da solo.

In breve, noterai che un evento mouse over si verifica su un elemento quando ci sei sopra - proveniente dal suo elemento figlio O padre, ma un evento enter mouse si verifica solo quando il mouse si sposta dall'esterno di questo elemento a questo elemento.

O come mouseover()dicono i documenti :

[ .mouseover()] può causare molti mal di testa a causa del gorgoglio degli eventi. Ad esempio, quando il puntatore del mouse si sposta sull'elemento interno in questo esempio, un evento di passaggio del mouse verrà inviato a quello, quindi scorrerà verso l'esterno. Ciò può attivare il nostro gestore di mouseover associato in momenti inopportuni. Vedi la discussione per .mouseenter()un'alternativa utile.


40
Non è vero che mouseenter"si verifica solo quando il mouse si sposta dall'elemento padre all'elemento". L'evento si verifica quando il mouse cambia dall'esterno dell'elemento all'interno. Non importa da quale elemento provenga il mouse. È vero che il mouse verrà spesso dal genitore, ma non sempre. Ad esempio, se il genitore non ha imbottitura o bordo, il mouse potrebbe entrare direttamente dal nonno e mouseentersparerà comunque. In effetti, può anche inserire l'elemento dall'esterno della finestra (se l'elemento è proprio sul bordo) e l'evento si attiva ancora.
callum,

2
DEMO è la migliore spiegazione;)
Luckylooke

per davvero, basta giocare con la demo.
Kevin Wheeler,


4

Come spesso accade con domande come queste, Quirksmode ha la risposta migliore .

Immagino che, poiché uno degli obiettivi di jQuery è quello di rendere agnostico il browser delle cose, l'utilizzo di uno dei nomi degli eventi attiverà lo stesso comportamento. Modifica: grazie ad altri post, ora vedo che non è così


0
$(document).ready(function() {
$("#outer_mouseover").bind
("Mouse Over Mouse Out",function(event){
console.log(event.type," :: ",this.id);})
$("#outer_mouseenter").bind
("Mouse enter Mouse leave",function(event){
console.log(event.type," :: ",this.id);})
 });


se il tuo elemento non ha elementi figlio, ma se l'elemento ha figli, le coppie si comportano in modo abbastanza diverso. In poche parole, se passi il mouse in un elemento e poi nel suo figlio, il mouseover / mouseout sparerebbe entrambi, mentre solo il mouseenter sparerebbe poiché il mouse è ancora tecnicamente all'interno dell'elemento.
Navata il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.