Câu trả lời:
Sự kiện mouseleave khác với mouseout ở cách nó xử lý sự kiện sủi bọt. Nếu sử dụng mouseout trong ví dụ này, thì khi con trỏ chuột di chuyển ra khỏi phần tử Bên trong, trình xử lý sẽ được kích hoạt. Đây thường là hành vi không mong muốn. Mặt khác, sự kiện mouseleave chỉ kích hoạt trình xử lý của nó khi con chuột rời khỏi phần tử mà nó bị ràng buộc, không phải phần tử con. Vì vậy, trong ví dụ này, trình xử lý được kích hoạt khi con chuột rời khỏi phần tử Bên ngoài, nhưng không phải phần tử Bên trong.
Có thể có những lúc mouseout
là một sự lựa chọn tốt hơn mouseleave
.
Ví dụ: giả sử bạn đã tạo chú giải công cụ mà bạn muốn hiển thị bên cạnh một phần tử trên đó mouseenter
. Bạn sử dụng setTimeout
để ngăn chú giải công cụ xuất hiện ngay lập tức. Bạn xóa thời gian chờ khi mouseleave
sử dụng clearTimeout
để nếu chuột rời khỏi chú giải công cụ sẽ không được hiển thị. Điều này sẽ hoạt động 99% thời gian.
Nhưng bây giờ giả sử phần tử mà bạn gắn chú giải công cụ là một nút có click
sự kiện và giả sử nút này nhắc người dùng bằng một confirm
hoặc alert
hộp. Người dùng nhấp vào nút và alert
kích hoạt. Người dùng nhấn nó đủ nhanh để chú giải công cụ của bạn không có cơ hội bật lên (cho đến nay rất tốt).
Người dùng nhấn alert
nút OK trong ô và chuột rời khỏi phần tử. Nhưng vì trang trình duyệt hiện đang ở trạng thái bị khóa, không javascript nào sẽ kích hoạt cho đến khi nút OK được nhấn, có nghĩa là mouseleave
sự kiện của bạn SẼ KHÔNG CHÁY . Sau khi người dùng nhấn OK, chú giải công cụ sẽ bật lên (không phải như những gì bạn muốn).
Sử dụng mouseout
trong trường hợp này sẽ là giải pháp thích hợp vì nó sẽ cháy.
mouseout
trong trường hợp đó sẽ cháy? Trình duyệt sẽ không ở trạng thái bị khóa cho mouseout
?
Tài liệu API jQuery:
mouseout
Loại sự kiện này có thể gây ra nhiều đau đầu do sự kiện sủi bọt. Ví dụ: khi con trỏ chuột di chuyển ra khỏi phần tử Bên trong trong ví dụ này, một sự kiện trỏ chuột sẽ được gửi đến phần tử đó, sau đó nhỏ giọt đến Bên ngoài. Điều này có thể kích hoạt trình xử lý mouseout bị ràng buộc vào những thời điểm không thích hợp. Xem thảo luận về .mouseleave () để biết một giải pháp thay thế hữu ích.
mouseleave
Một sự kiện tùy chỉnh cũng vậy , được thiết kế vì lý do trên.
Sự kiện Mouseout sẽ kích hoạt khi chuột rời khỏi phần tử đã chọn và cũng như khi chuột rời khỏi phần tử con của nó.
Phần tử Event Mouseleave sẽ kích hoạt khi con trỏ chỉ rời khỏi phần tử đã chọn.
Tham khảo: W3School