2013-05-11 13 views
8

Nel fare $(...your selector here...).is(":hover"), jQuery prima 1.9.1 ha dato risposta corretta, mentre jQuery 1.9.1 ti dice questo:.is (": hover") è rotto come di jQuery 1.9 Come risolvere

Error: Syntax error, unrecognized expression: unsupported pseudo: hover

qui è una soluzione alternativa (rispondendo non è necessario.)

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

risposta breve, verificare se

.parent().find(":hover") 

ha lunghezza 1 e contiene l'elemento in questione.

questo non è l'esecuzione di un'azione al passaggio del mouse - per questo, basta usare .hover() si tratta, in un punto arbitrario nel tempo, scoprire se o non qualche elemento VIENE aleggiava

+2

Stai cercando di rispondere alla tua domanda? Se è così fallo correttamente: scrivi una risposta. –

+1

Stai complicando le cose. Semplicemente ['.hover()'] (http://api.jquery.com/hover/) farebbe: http://jsfiddle.net/BxL4w/5/ – Antony

+1

@Anthony: sbagliato. Voglio un booleano, è stazionario o no. Non voglio eseguire un'azione al passaggio del mouse. – mathheadinclouds

risposta

12

Assumendo il tuo selettore è #myid, utilizza $('#myid:hover') invece di utilizzare .is().

Se si utilizza $(this) o una variabile, utilizzare myVar.filter(':hover').

+0

hai ragione, questo è più semplice. Lo metto anche al violino – mathheadinclouds

+5

e riguardo a quando si usa '$ (this)' o un oggetto variabile? –

+0

quindi utilizzare var temp = $ (yourElement) .parent(). Find (": hover"); return temp.length == 1 && temp [0] == yourElement; – mathheadinclouds

0

Tuttavia la soluzione precedente non è adatta quando si confrontano elementi utilizzando jQuery.fn.is() con un selettore composto che non è noto in anticipo e che potrebbe corrispondere a diversi elementi nel contenitore padre.

esempio, la stessa eccezione viene generata quando selectorText in style_get() sotto è uguale a: ".mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar, .mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer: muovere .mCSB_dragger .mCSB_dragger_bar"

..perché hover non è definito nel Sizzle.selectors.pseudos o Sizzle.selectors.setFilters (jquery-2.1.4, linea 1764) ..

function style_get(elem) { 

    var sheets=document.styleSheets; 
    var css_properties={}; 
    elem=$(elem); 

    for (var s in sheets) { 
    var rules=sheets[s].rules || sheets[s].cssRules; 

    for (var r in rules) { 
     if (elem.is(rules[r].selectorText)) { 

     css_properties=$.extend(
      css_properties, 
      css.parse(rules[r].style), 
      css.parse(elem.attr('style')) 
     ); 

     } 
    } 

    } 

    return css_properties; 

} 
+0

A quale "soluzione" si riferisce che è "non adatto"? Stai commentando un altro post? Se è così dovresti pubblicare un commento su quel post. La tua risposta sembra incompleta così com'è. – Kmeixner

+0

@Kmeixner, l'OP ha scritto "Ecco una soluzione ..." potrebbe essere la risposta a ciò che stai chiedendo. L'ho facilmente trovato usando ctrl + f e digitando "workaround" – Zectbumo

0

cercare di dare funzione anonima in .filter()

penso, la mia soluzione vi aiuterà a:

// 
// jQuery 3 pseudo ':hover' doesn't support 
// 

// Working on jQuery 1.7.1 
$("*").on('click', $.proxy(function() { 
    if (this.$('.tooltip:hover').length > 0) { // jQuery 3.2.1 -> Uncaught Error: Syntax error, unrecognized expression: unsupported pseudo: hover 
     console.log('Hovered!'); 
    } else { 
     console.log('Where is my element!?'); 
    } 
}, this)); 


// Updated solution for jQuery 1.7.1 - 3.2.1 
$("*").on('click', $.proxy(function() { 
    var isHovered = $('.tooltip').filter(function() { 
     return $(this).is(":hover"); 
    }); 

    if (isHovered.length > 0) { 
     console.log('Hovered!'); 
    } else { 
     console.log('Where is my element!?'); 
    } 
}, this)); 

inoltre, è possibile vedere il mio GitHub gist: https://gist.github.com/antydemant/74b00e27790e65f4555a29b73eea7bb2