Uwaga: odpowiednik jest mouseoveri odpowiednik mouseleavejest mouseenter.
Andrew,
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.
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ć.
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.
mouseover
i odpowiednikmouseleave
jestmouseenter
.Odpowiedzi:
Źródło: http://api.jquery.com/mouseleave/
źródło
Może się zdarzyć, że
mouseout
będzie lepszym wyborem niżmouseleave
.Na przykład, powiedzmy, że utworzyłeś podpowiedź, która ma być wyświetlana obok elementu
mouseenter
. Używasz,setTimeout
aby zapobiec natychmiastowemu wyświetlaniu podpowiedzi. Wyczyścisz limit czasu podczasmouseleave
używania,clearTimeout
wię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
click
zdarzeniem i załóżmy również, że ten przycisk wyświetla użytkownikowi poleconfirm
lubalert
pole. Użytkownik klika przycisk ialert
odpala. 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
alert
box 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, żemouseleave
zdarzenie NIE ZAPALI . Po naciśnięciu OK przez użytkownika pojawi się okienko z informacją (co nie jest tym, czego chciałeś).Użycie
mouseout
w tym przypadku byłoby odpowiednim rozwiązaniem, ponieważ będzie odpalać.źródło
mouseout
w takim przypadku wybuchnie? Czy przeglądarka nie byłaby nadal zablokowana przezmouseout
?Dokumentacja jQuery API:
mouseout
Tak samo
mouseleave
jest z niestandardowym wydarzeniem, które zostało zaprojektowane z powyższego powodu.http://api.jquery.com/mouseleave/
źródło
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
źródło