Mam plik, <ul>
który jest zapełniany javascript po początkowym załadowaniu strony. Obecnie używam .bind
z mouseover
i mouseout
.
Projekt właśnie zaktualizował się do jQuery 1.7, więc mam opcję korzystania .on
, ale wydaje się, że nie mogę go uruchomić hover
. Czy można używać .on
z hover
?
EDYCJA : Elementy, z którymi się wiążę, są ładowane javascript po załadowaniu dokumentu. Dlatego używam on
i nie tylko hover
.
mouseenter
imouseleave
, zgodnie z sugestią calebthebrewer.Odpowiedzi:
( Spójrz na ostatnią edycję w tej odpowiedzi, jeśli chcesz używać
.on()
z elementami wypełnionymi JavaScript )Użyj tego dla elementów, które nie są wypełniane za pomocą JavaScript:
.hover()
ma własny moduł obsługi: http://api.jquery.com/hover/Jeśli chcesz zrobić wiele rzeczy, połącz je w
.on()
module obsługi w następujący sposób:Zgodnie z odpowiedziami podanymi poniżej możesz używać
hover
z.on()
, ale:Ponadto nie ma żadnych korzyści związanych z wydajnością korzystania z niego i jest bardziej nieporęczny niż zwykłe używanie
mouseenter
lubmouseleave
. Podana przeze mnie odpowiedź wymaga mniej kodu i jest właściwym sposobem na osiągnięcie czegoś takiego.EDYTOWAĆ
Minęło trochę czasu, odkąd udzielono odpowiedzi na to pytanie i wydaje się, że zyskało ono trochę trakcji. Powyższy kod nadal obowiązuje, ale chciałem dodać coś do mojej oryginalnej odpowiedzi.
Chociaż wolę używać
mouseenter
imouseleave
(pomaga mi zrozumieć, co się dzieje w kodzie) z.on()
nim, to tak samo jak pisanie poniższegohover()
Ponieważ oryginalne pytanie nie zapytać jak mogli prawidłowo korzystać
on()
zhover()
, myślałem, że chciałbym poprawić wykorzystanieon()
i nie uważają, że konieczne jest dodaniehover()
kodu w czasie.EDYCJA 11 GRUDNIA 2012
Niektóre nowe odpowiedzi podane poniżej szczegółowo opisują, jak
.on()
powinno działać, jeślidiv
pytanie jest wypełniane za pomocą JavaScript. Załóżmy na przykład, że wypełniasz zdarzeniediv
jQuery za pomocą.load()
:Powyższy kod
.on()
nie będzie obowiązywał. Zamiast tego powinieneś nieco zmodyfikować kod, tak jak poniżej:Ten kod będzie działał dla elementu wypełnionego JavaScript po
.load()
zdarzeniu. Po prostu zmień argument na odpowiedni selektor.źródło
.on()
rozwiązanie działa albo usuwając zdarzenie pseudo najechania i używając prawdziwych. Podoba mi się pierwszy, który zilustrowałeś za pomocą mouseenter / mouseleave +1Żadne z tych rozwiązań nie działało dla mnie, gdy najechanie myszą na obiekty utworzone po załadowaniu dokumentu w odpowiedzi na pytanie. Wiem, że to pytanie jest stare, ale mam rozwiązanie dla tych, którzy wciąż szukają:
Spowoduje to powiązanie funkcji z selektorem, dzięki czemu obiekty z tym selektorem wykonane po przygotowaniu dokumentu będą mogły nadal go wywoływać.
źródło
mouseover
imouseout
zdarzenia w tym miejscu powodują ciągłe uruchamianie kodu, gdy użytkownik porusza myszą wewnątrz elementu. Myślęmouseenter
imouseleave
są bardziej odpowiednie, ponieważ wystrzelą tylko raz przy wejściu.Nie jestem pewien, jak wygląda reszta twojego Javascript, więc nie będę w stanie stwierdzić, czy występują jakieś zakłócenia. Ale
.hover()
działa dobrze jako wydarzenie.on()
.Jeśli chcesz móc wykorzystać jego zdarzenia, użyj zwróconego obiektu ze zdarzenia:
http://jsfiddle.net/hmUPP/2/
źródło
$('#id').hover(function(){ //on }, function(){ //off});
.on()
zhover
kiedy można tak łatwo pozbyć.on()
i zastąpić go z.hover()
funkcji i uzyskać takie same wyniki. Czy jQuery nie pisze mniej kodu?mouseenter
i jakmouseleave
działa.on()
hover
obsługa zdarzeń wOn()
została wycofana w jQuery 1.8 i usunięta w jQuery 1.9.Funkcja hover jQuery daje funkcję najechania myszką i myszy.
$ (selektor) .hover (inFunction, outFunction);
Źródło: http://www.w3schools.com/jquery/event_hover.asp
źródło
Po prostu surfowałem po Internecie i czułem, że mogę coś wnieść. Zauważyłem, że powyższy kod opublikowany przez @calethebrewer może powodować wiele wywołań selektora i nieoczekiwane zachowanie, na przykład:
To skrzypce http://jsfiddle.net/TWskH/12/ ilustruje mój punkt widzenia. Podczas animowania elementów, takich jak wtyczki, zauważyłem, że te wielokrotne wyzwalacze powodują niezamierzone zachowanie, które może spowodować wywołanie animacji lub kodu więcej niż jest to konieczne.
Moją sugestią jest po prostu zastąpienie mouseenter / mouseleave: -
Chociaż zapobiegło to wywołaniu wielu wystąpień mojej animacji, ostatecznie zdecydowałem się na najechanie kursorem myszy / pozostawienie myszy, ponieważ musiałem ustalić, kiedy dzieci rodzica były najechane.
źródło
Można skorzystać
.on()
zhover
robiąc to, co mówi Dodatkowa sekcja Uwagi:Byłoby to wykonać następujące czynności:
EDYCJA (uwaga dla użytkowników jQuery 1.8+):
źródło
mouseenter
imouseleave
... Wiem, to nie odpowiada na pierwotne pytanie OP, ale nadal używaniehover
w ten sposób nie jest mądre..hover()
.mouseenter
imouseleave
zamiast po prostu czyni go pracowaćhover
. Jeśli nie ma żadnego rzeczywistego powodu do używaniahover
z powodów związanych z wydajnością, dlaczego warto go używać, gdy jest wysoce zniechęcany do nowego kodu?hover
obsługa zdarzeń wOn()
została wycofana w jQuery 1.8 i usunięta w jQuery 1.9.źródło
Możesz podać jeden lub wiele typów zdarzeń oddzielonych spacją.
Więc
hover
równa sięmouseenter mouseleave
.Oto moja sugestia:
źródło
Jeśli potrzebujesz tego jako warunku na innym wydarzeniu, rozwiązałem to w ten sposób:
Następnie w innym wydarzeniu możesz go łatwo użyć:
(Widzę, że niektórzy używają
is(':hover')
do rozwiązania tego. Ale to nie jest (jeszcze) prawidłowy selektor jQuery i nie działa we wszystkich zgodnych przeglądarkach)źródło
Wtyczka jQuery hoverIntent http://cherne.net/brian/resources/jquery.hoverIntent.html wykracza daleko poza naiwne podejścia wymienione tutaj. Chociaż z pewnością działają, niekoniecznie zachowują się tak, jak oczekują użytkownicy.
Najsilniejszym powodem użycia hoverIntent jest limit czasu funkcja . Umożliwia wykonywanie takich czynności, jak zapobieganie zamykaniu menu, ponieważ użytkownik przeciąga myszą nieco za daleko w prawo lub w lewo, zanim kliknie żądany element. Zapewnia również możliwości nie aktywowania zdarzeń zawisu w zaporze i czeka na skoncentrowane zawisanie.
Przykład użycia:
Dalsze wyjaśnienie tego można znaleźć na https://stackoverflow.com/a/1089381/37055
źródło