2011-11-04 17 views

risposta

13

:hover è un CSS pseudo-class , non un selettore jQuery. Non può essere utilizzato in modo affidabile con is() su tutti i browser.

+1

così come faccio a controllare è del mouse su un elemento o no –

+0

Il collegamento in Connell di un swer è abbastanza utile. –

+1

Mi permetto di dissentire: http://jsfiddle.net/cSCF7/1/ –

6

Come ha detto Frederic, :hover fa parte del CSS e non è un selettore in jQuery.

Per una soluzione alternativa, leggere How do I check if the mouse is over an element in jQuery?

impostare un timeout sul mouseout di dissolvenza e memorizzare il valore di ritorno di dati nell'oggetto. Quindi onmouseover, annulla il timeout se c'è un valore nei dati.

rimuovere i dati sulla callback della dissolvenza.

1

perché non usare semplicemente .hover?

$(".xx").hover(function(){ 
    alert("d"); 
}); 
1

provare qualcosa di simile questo-

$('.xx').hover(function(){   
     alert('d'); 
    }, function() { 
     alert('f); 
    }); 
+1

come mi aiuta a controllare il passaggio del genitore! – Adrian

27
function idIsHovered(id){ 
    return $("#" + id + ":hover").length > 0; 
} 

http://jsfiddle.net/mathheadinclouds/V342R/

+1

Funziona perfettamente. Non sono sicuro del motivo per cui questo non è svalutato. Realizza esattamente ciò di cui l'OP ha bisogno, senza dover impostare i flag su tutto il codice. – friggle

0

provare qualcosa di simile

flag = ($('.xx:hover').length>0); 

Così si può scoprire se il mouse è, l'oggetto

0
x.filter(':hover').length 

Questo può essere anche utilizzabile quando si erano già interrogati alcuni oggetti o all'interno della funzione di callback.

0

Ecco un piccolo plug-in jQuery che controlla se il mouse si trova su un elemento.

Usage:

$("#YourElement").isMouseOverMe();

Esempio:

(function($) { 
 

 
    var mx = 0; 
 
    var my = 0; 
 

 
    $(document).mousemove(function(e) { // no expensive logic here 
 
    mx = e.clientX; 
 
    my = e.clientY; 
 
    }) 
 

 
    $.fn.isMouseOverMe = function() { 
 

 
    var $el = $(this); 
 
    var el_xmin = $el.offset().left; 
 
    var el_ymin = $el.offset().top; 
 
    var el_xmax = el_xmin + $el.width(); 
 
    var el_ymax = el_ymin + $el.height(); 
 
    return mx >= el_xmin && mx <= el_xmax && my >= el_ymin && my <= el_ymax; 
 
    }; 
 

 
}(jQuery)); 
 

 
$(document).mouseup(function(e) { 
 
    console.log($("#div").isMouseOverMe()) 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<h2>Click inside or outside of the yellow box</h2> 
 
<div id="div" style="width:200px;height:200px;background-color:yellow;margin-top:50px"></div>