Jaka jest różnica między jQuery's mouseout () i mouseleave ()?


Odpowiedzi:


101

Zdarzenie mouseleave różni się od mouseout sposobem obsługi propagacji zdarzeń. Gdyby w tym przykładzie użyto funkcji mouseout, to po przesunięciu wskaźnika myszy poza element wewnętrzny zostanie wyzwolony moduł obsługi. Zwykle jest to niepożądane zachowanie. Z drugiej strony zdarzenie mouseleave wyzwala swój program obsługi tylko wtedy, gdy mysz opuszcza element, do którego jest przypisana, a nie element podrzędny. W tym przykładzie procedura obsługi jest wyzwalana, gdy mysz opuszcza element Outer, ale nie element Inner.

Źródło: http://api.jquery.com/mouseleave/


1
mouseover vs. mouseenter: jsfiddle.net/hejdav/945pv53h/3 (odpowiednik mouseout i mouseleave)
hejdav

Wyjaśnienie powyżej staje się znacznie bardziej jasne, gdy widzę, że obie metody działają i różnica między nimi, zadziałała dla mnie.
invinciblemuffi

15

Może się zdarzyć, że mouseoutbędzie lepszym wyborem niż mouseleave.

Na przykład, powiedzmy, że utworzyłeś podpowiedź, która ma być wyświetlana obok elementu mouseenter. Używasz, setTimeoutaby zapobiec natychmiastowemu wyświetlaniu podpowiedzi. Wyczyścisz limit czasu podczas mouseleaveużywania, clearTimeoutwięc jeśli mysz opuści etykietkę, nie będzie wyświetlana. Będzie to działać w 99% przypadków.

Ale teraz załóżmy, że element, do którego jest dołączona podpowiedź, jest przyciskiem ze clickzdarzeniem i załóżmy również, że ten przycisk wyświetla użytkownikowi pole confirmlub alertpole. Użytkownik klika przycisk i alertodpala. Użytkownik nacisnął przycisk na tyle szybko, że Twoja podpowiedź nie miała szansy się wyświetlić (jak na razie dobrze).

Użytkownik naciska przycisk alertbox OK, a myszka opuszcza element. Ale ponieważ strona przeglądarki jest teraz w stanie zablokowanym, żaden skrypt javascript nie zostanie uruchomiony, dopóki nie zostanie naciśnięty przycisk OK, co oznacza, że mouseleavezdarzenie NIE ZAPALI . Po naciśnięciu OK przez użytkownika pojawi się okienko z informacją (co nie jest tym, czego chciałeś).

Użycie mouseoutw tym przypadku byłoby odpowiednim rozwiązaniem, ponieważ będzie odpalać.


5
Czy mógłbyś wyjaśnić, dlaczego mouseoutw takim przypadku wybuchnie? Czy przeglądarka nie byłaby nadal zablokowana przez mouseout?
user31782

10

Dokumentacja jQuery API:

mouseout

Ten typ zdarzenia może powodować wiele bólów głowy z powodu bulgotania zdarzeń. Na przykład, gdy wskaźnik myszy wyjdzie z elementu wewnętrznego w tym przykładzie, zostanie do niego wysłane zdarzenie mouseout, a następnie przepłynie do Outer. Może to wyzwolić powiązaną procedurę obsługi wyjścia myszy w nieodpowiednich momentach. Zobacz dyskusję na temat .mouseleave (), aby znaleźć przydatną alternatywę.

Tak samo mouseleavejest z niestandardowym wydarzeniem, które zostało zaprojektowane z powyższego powodu.

http://api.jquery.com/mouseleave/


3

Wydarzenie Mouseout zostanie uruchomione, gdy mysz opuści wybrany element, a także gdy mysz opuści jego elementy potomne.

Element Event Mouseleave zostanie wyzwolony, gdy wskaźnik opuści tylko wybrany element.

Źródła : W3School

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.