2013-05-11 13 views
8

Podczas $(...your selector here...).is(":hover"), jQuery przed 1.9.1 dał poprawną odpowiedź, a jQuery 1.9.1 mówi wam to:.is (": hover") jest podzielone jak jQuery 1.9 Jak naprawić

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

tutaj jest obejście (odpowiadając na nie konieczne.)

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

krótkiej odpowiedzi, sprawdź czy

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

ma długość 1 i zawiera dany element.

Tu nie chodzi o wykonanie akcji przy aktywowaniu - za to, wystarczy użyć .hover() Chodzi o to, w dowolnym momencie, dowiedzieć się, czy jakiś element JEST unosił

+2

Czy starasz się odpowiedzieć na swoje pytanie? Jeśli tak, zrób to poprawnie: napisz odpowiedź. –

+1

Powodujesz, że rzeczy są skomplikowane. Po prostu ['.hover()'] (http://api.jquery.com/hover/) zrobi: http://jsfiddle.net/BxL4w/5/ – Antony

+1

@Anthony: źle. Chcę boolean, czy to unosi się, czy nie. Nie chcę wykonywać akcji po najechaniu myszą. – mathheadinclouds

Odpowiedz

12

Zakładając Twój selektor to #myid, użyj $('#myid:hover') zamiast używać .is().

Jeśli używasz $(this) lub zmiennej, użyj myVar.filter(':hover').

+0

masz rację, to jest prostsze. Też umieściłem to na skrzypcach – mathheadinclouds

+5

jak przy użyciu '$ (this)' lub obiektu zmiennego? –

+0

następnie użyj var temp = $ (yourElement) .parent(). Find (": hover"); return temp.length == 1 && temp [0] == yourElement; – mathheadinclouds

0

Jednak powyższe obejście jest nieodpowiednie w przypadku porównywania elementów za pomocą metody jQuery.fn.is() z komponującym selektorem, który nie jest wcześniej znany, i który może pasować do kilku elementów w kontenerze nadrzędnym.

na przykład, to samo jest wyjątek przy selectorText w style_get() poniżej jest równa ".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: umieszczenie .mCSB_dragger .mCSB_dragger_bar"

..because aktywowania nie jest zdefiniowany w Sizzle.selectors.pseudos lub Sizzle.selectors.setFilters (jQuery-2.1.4, wiersz 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

Które "obejście" oznacza, że ​​twój "nieodpowiedni"? Czy komentujesz inny post? Jeśli tak, powinieneś zamiast tego opublikować komentarz do tego posta. Twoja odpowiedź wydaje się niekompletna. – Kmeixner

+0

@Kmeixner, OP napisał: "Tutaj jest obejście ..." może to być odpowiedź na to, o co prosisz. Z łatwością znalazłem to za pomocą ctrl + f i wpisując "obejście" – Zectbumo

0

Należy starać funkcję anonimową w .filter()

myślę, że moje rozwiązanie pomoże Ci:

// 
// 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)); 

również można zobaczyć moje GitHub sens: https://gist.github.com/antydemant/74b00e27790e65f4555a29b73eea7bb2