Tôi biết về các mô hình sự kiện khác nhau trong Javascript (mô hình WC3 so với mô hình Microsoft), cũng như sự khác biệt giữa bong bóng và chụp. Tuy nhiên, sau một vài giờ đọc các bài viết khác nhau về vấn đề này, tôi vẫn không chắc chắn cách mã đúng hành vi dường như đơn giản sau đây:Javascript: Nhiều sự kiện mouseout kích hoạt
Nếu tôi có một bên ngoài div
và phần tử bên trong div
, tôi muốn một con chuột- sự kiện được kích hoạt khi chuột rời khỏi div ngoài. Khi chuột di chuyển từ bên trong-div sang bên ngoài-div, không có gì xảy ra, và khi chuột di chuyển từ bên ngoài-div đến inner-div thì không có gì xảy ra. Sự kiện chỉ nên chỉ cháy nếu chuột di chuyển từ bên ngoài-div đến trang xung quanh.
<div id="outer" style = "width:20em; height:20em; border:1px solid #F00" align = "center" onmouseout="alert('mouseout event!')" >
<div id="inner" style = "width:18em; height:18em; border:1px solid #000"></div>
</div>
Bây giờ, nếu tôi đặt "mouseout" sự kiện trên outer-div, hai sự kiện mouseout được kích hoạt khi di chuyển chuột từ nội div để trang xung quanh, bởi vì sự kiện cháy một khi chuột di chuyển từ trong ra ngoài, và sau đó lại di chuyển từ bên ngoài sang trang xung quanh.
Tôi biết tôi có thể hủy sự kiện bằng cách sử dụng ev.stopPropagation()
, vì vậy tôi đã thử đăng ký trình xử lý sự kiện với bên trong-div để hủy sự kiện tuyên truyền. Tuy nhiên, điều này sẽ không ngăn sự kiện kích hoạt khi chuột di chuyển từ bên ngoài-div sang bên trong-div.
Vì vậy, trừ khi tôi nhìn thấy một cái gì đó, có vẻ như với tôi hành vi này không thể thực hiện được nếu không có các hàm theo dõi chuột phức tạp. Trong tương lai, tôi dự định sẽ thực hiện lại rất nhiều mã này bằng cách sử dụng một khung nâng cao hơn, như JQuery, nhưng hiện tại, tôi tự hỏi liệu có cách đơn giản để thực hiện hành vi trên trong Javascript thông thường hay không.
Trang này có lẽ coi các yếu tố được kết hợp không? Giống như bên ngoài-div chính nó sẽ chỉ là "bên ngoài-div" và sau đó bên trong-div bên trong của nó sẽ là "bên ngoài div + bên trong-div", vì vậy nếu bạn vượt qua giữa chúng nó xử lý chúng như là hai riêng biệt, cả hai với một sự kiện onmouseout gắn liền với cả hai người trong số họ? Có vẻ kỳ quặc nhưng điều đó dường như là cách các trang hoạt động ở đây. – animuson