Nie szukam akcji do wywołania po najechaniu kursorem, ale zamiast tego sposób na sprawdzenie , czy element jest aktualnie najechany . Na przykład:
$('#elem').mouseIsOver(); // returns true or false
Czy istnieje metoda jQuery, która to umożliwia?
javascript
jquery
James Skidmore
źródło
źródło
Odpowiedzi:
Oryginalna (i poprawna) odpowiedź:
Możesz użyć
is()
i sprawdzić selektor:hover
.Przykład: http://jsfiddle.net/Meligy/2kyaJ/3/
(Działa to tylko wtedy, gdy selektor pasuje do maksymalnie JEDNEGO elementu. Zobacz Edycja 3 po więcej)
.
Edycja 1 (29 czerwca 2013 r.): (Dotyczy tylko jQuery 1.9.x, ponieważ działa z wersją 1.10+, zobacz następną edycję 2)
Ta odpowiedź była najlepszym rozwiązaniem w momencie udzielenia odpowiedzi na pytanie. Ten selektor „: hover” został usunięty wraz z
.hover()
usunięciem metody w jQuery 1.9.x.Co ciekawe, niedawna odpowiedź udzielona przez „allicarn” pokazuje, że można go użyć
:hover
jako selektora CSS (w przeciwieństwie do Sizzle), gdy przedrostkuje się go selektorem$($(this).selector + ":hover").length > 0
i wydaje się, że działa!Ponadto wtyczka hoverIntent wspomniana w innej odpowiedzi również wygląda bardzo ładnie.
Edycja 2 (21 września 2013):
.is(":hover")
działaNa podstawie innego komentarza zauważyłem, że oryginalny sposób, w jaki publikowałem,
.is(":hover")
nadal działa w jQuery, więc.Działało w jQuery 1.7.x.
Przestał działać w 1.9.1, kiedy ktoś mi to zgłosił i wszyscy myśleliśmy, że jest to związane z usunięciem
hover
aliasu do obsługi zdarzeń w tej wersji przez jQuery .Zadziałało ponownie w jQuery 1.10.1 i 2.0.2 (być może 2.0.x), co sugeruje, że awaria w 1.9.x była błędem lub nie było celowym zachowaniem, jak myśleliśmy w poprzednim punkcie.
Jeśli chcesz to przetestować w konkretnej wersji jQuery, po prostu otwórz przykład JSFidlle na początku tej odpowiedzi, zmień na żądaną wersję jQuery i kliknij „Uruchom”. Jeśli kolor zmienia się po najechaniu kursorem, to działa.
.
Edycja 3 (9 marca 2014 r.): Działa tylko wtedy, gdy sekwencja jQuery zawiera pojedynczy element
Jak pokazuje @Wilmer w komentarzach, ma skrzypce, które nawet nie działają przeciwko wersjom jQuery, które ja i inni tutaj testowaliśmy. Kiedy próbowałem dowiedzieć się, co jest wyjątkowego w jego przypadku, zauważyłem, że próbuje sprawdzić wiele elementów naraz. To było rzucanie
Uncaught Error: Syntax error, unrecognized expression: unsupported pseudo: hover
.Więc pracując ze skrzypcami, to NIE działa:
Chociaż robi pracy:
Działa również z sekwencjami jQuery, które zawierają pojedynczy element, na przykład jeśli oryginalny selektor pasował tylko do jednego elementu lub jeśli wywołałeś
.first()
wyniki itp.Jest to również wspomniane w moim biuletynie JavaScript + Web Dev Tips & Resources .
źródło
Syntax Error, unrecognized expression: hover. jquery-1.7.js line 4179
.Posługiwać się:
jQuery 1.9+
źródło
Nie działa w jQuery 1.9. Utworzono tę wtyczkę na podstawie odpowiedzi użytkownika2444818.
http://jsfiddle.net/Wp2v4/1/
źródło
Ustaw flagę po najechaniu:
Następnie po prostu sprawdź swoją flagę.
źródło
mouseleave
jeden element, chcę sprawdzić, czy myszka weszła w inny konkretny element.e.fromElement
ie.toElement
. Czy to zadziała dla Ciebie?.data()
.Kilka aktualizacji do dodania po dłuższej pracy nad tym tematem:
Użyliśmy hoverIntent https://github.com/briancherne/jquery-hoverIntent, aby rozwiązać ten problem za nas. Zasadniczo uruchamia się, jeśli ruch myszy jest bardziej zamierzony. (należy zauważyć, że wywoła to zarówno wejście myszy, jak i wyjście - jeśli chcesz użyć tylko jednego przebiegu, konstruktor jest pustą funkcją)
źródło
Możesz odfiltrować swój element ze wszystkich elementów znajdujących się na kursie. Problematyczny kod:
Zapisz kod:
Aby zwrócić wartość logiczną:
źródło
Zaakceptowana odpowiedź nie działa dla mnie w JQuery 2.x
.is(":hover")
zwraca false przy każdym połączeniu.Skończyło się na całkiem prostym rozwiązaniu, które działa:
źródło
Rozwinięcie odpowiedzi @ Mohameda. Możesz użyć trochę hermetyzacji
Lubię to:
Używaj go jak:
Rozwidlone skrzypce: http://jsfiddle.net/cgWdF/1/
źródło
Podoba mi się pierwsza odpowiedź, ale dla mnie to dziwne. Próbując sprawdzić mysz zaraz po załadowaniu strony, muszę ustawić co najmniej 500 milisekund opóźnienia, aby zadziałała:
http://codepen.io/molokoloco/pen/Grvkx/
źródło
Ustawienie flagi dla odpowiedzi kinakuta wydaje się rozsądne, możesz umieścić słuchacza na ciele, abyś mógł sprawdzić, czy w danym momencie jakiś element jest najechany kursorem.
Jak jednak chcesz radzić sobie z węzłami podrzędnymi? Być może powinieneś sprawdzić, czy element jest przodkiem aktualnie zaznaczonego elementu.
źródło