Odpowiedzi:
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.
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 podczas mouseleave
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 pole confirm
lub alert
pole. Użytkownik klika przycisk i alert
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, że mouseleave
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ć.
mouseout
w takim przypadku wybuchnie? Czy przeglądarka nie byłaby nadal zablokowana przez mouseout
?
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 mouseleave
jest z niestandardowym wydarzeniem, które zostało zaprojektowane z powyższego powodu.
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.