function doSomething(e) { if (!e) var e = window.event; var relTarg = e.relatedTarget || e.toElement; }
鼠标离开一个层 在一个基于层的导航菜单里面你可能需要知道鼠标什么时候离开层这样你才能把那个层关闭。所以你给这个层的onmouseout注册了一个事件处理程序。然后事件冒泡会导致当鼠标离开任意一个层的时候都会触发这个onmouseout。 -------------- | Layer |.onmouseout = doSomething; | -------- | | | Link | ----> We want to know about this mouseout
| -------- | | -------- | | | Link | | | | ----> | but not about this one | -------- | -------------- ---->: mouse movement 另外的一个停止的方法是当你把鼠标移入这个层,然后到了一个链接上,浏览器就在这个层上注册一个mouseout事件。这个让我很不明白(鼠标依然在层里),但是所有的浏览器都没问题。 那么我们如何在鼠标真正离开的层的时候让mouseout发生呢?
function doSomething(e) { if (!e) var e = window.event; var tg = (window.event) ? e.srcElement : e.target; if (tg.nodeName != 'DIV') return; var reltg = (e.relatedTarget) ? e.relatedTarget : e.toElement; while (reltg != tg && reltg.nodeName != 'BODY') reltg= reltg.parentNode if (reltg== tg) return; // Mouseout took place when mouse actually left layer // Handle event }