Mà không đi sâu vào chi tiết quá nhiều, tôi đã có một img với hiệu ứng Rollover, tức là mouseout/overs đặt giá trị img src thành ẩn (hoặc điều này có thể thực hiện trong một ngữ cảnh khác với các biến gloabl). Tôi đã sử dụng một số javascript để hoán đổi cả giá trị hình ảnh quá/xuất của tôi và tôi gọi là FireEvent (ElementId, "mouseover"); để kích hoạt thay đổi. Javascript của tôi đã được ẩn/hiển thị các yếu tố trên trang. Điều này khiến cho con trỏ đôi khi vượt quá img mà tôi đã sử dụng để kích hoạt sự kiện - giống như cái mà tôi đã hoán đổi và đôi khi con trỏ không vượt quá img sau khi nhấp chuột.
Di chuyển chuột không kích hoạt trừ khi bạn thoát ra và nhập lại thành phần, vì vậy sau khi sự kiện của tôi được kích hoạt, việc di chuột qua lại cần phải "kích hoạt lại" để chiếm vị trí con trỏ mới. Đây là giải pháp của tôi. Sau khi tôi ẩn/hiển thị các phần tử trang khác nhau, và để làm img src hoán đổi của tôi như mô tả, tôi gọi hàm RefreshMouseEvents (ElementId) thay vì FireEvent (ElementId, "di chuột qua").
Tính năng này hoạt động trong IE9 (không chắc chắn về các trình duyệt khác).
function RefreshMouseEvents(ElementId)
{
FireEvent(ElementId, 'mouseover');
setTimeout("TriggerMouseEvent('" + ElementId + "')" , 1);
}
function TriggerMouseEvent(ElementId)
{
if(IsMouseOver(ElementId, event.clientX, event.clientY))
FireEvent(ElementId, 'mouseover');
else
FireEvent(ElementId, 'mouseout');
}
function IsMouseOver(ElementId, MouseXPos, MouseYPos)
{
if(document.getElementById(ElementId) != null)
{
var Element = document.getElementById(ElementId);
var Left = Element.getBoundingClientRect().left,
Top = Element.getBoundingClientRect().top,
Right = Element.getBoundingClientRect().right,
Bottom = Element.getBoundingClientRect().bottom;
return ((MouseXPos >= Left) && (MouseXPos <= Right) && (MouseYPos >= Top) && (MouseYPos <= Bottom))
}
else
return false;
}
function FireEvent(ElementId, EventName)
{
if(document.getElementById(ElementId) != null)
{
if(document.getElementById(ElementId).fireEvent)
{
document.getElementById(ElementId).fireEvent('on' + EventName);
}
else
{
var evObj = document.createEvent('Events');
evObj.initEvent(EventName, true, false);
document.getElementById(ElementId).dispatchEvent(evObj);
}
}
}
Bạn có thể sử dụng liên kết jquery –
Bạn đã thử cái này chưa? Sự kiện onmouseover _should_ kích hoạt sự kiện cha mẹ cũng nhờ sự truyền bá sự kiện. –
ok tôi đã không nghĩ về điều đó, xin lỗi đó là một ví dụ hơi xấu bởi vì trong ứng dụng của tôi họ không thực sự là yếu tố lồng nhau. div trên cùng được định vị hoàn toàn trên một số phần tử khác. – fearofawhackplanet