function doSomething(e) { if (!e) var e = window.event; var relTarg = e.relatedTarget || e.toElement; }
鼠標(biāo)離開一個層 在一個基于層的導(dǎo)航菜單里面你可能需要知道鼠標(biāo)什么時候離開層這樣你才能把那個層關(guān)閉。所以你給這個層的onmouseout注冊了一個事件處理程序。然后事件冒泡會導(dǎo)致當(dāng)鼠標(biāo)離開任意一個層的時候都會觸發(fā)這個onmouseout。 -------------- | Layer |.onmouseout = doSomething; | -------- | | | Link | ----> We want to know about this mouseout
| -------- | | -------- | | | Link | | | | ----> | but not about this one | -------- | -------------- ---->: mouse movement 另外的一個停止的方法是當(dāng)你把鼠標(biāo)移入這個層,然后到了一個鏈接上,瀏覽器就在這個層上注冊一個mouseout事件。這個讓我很不明白(鼠標(biāo)依然在層里),但是所有的瀏覽器都沒問題。 那么我們?nèi)绾卧谑髽?biāo)真正離開的層的時候讓mouseout發(fā)生呢?
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 }