2011-08-16 37 views
0

有一個菜單項,它顯示一個模態div。希望創建的div自動關閉,無論何時用戶將其光標移動到,但是當最初創建模態div時,光標,所以光標首先需要移動到其中。在javascript onmouseout中,如何使光標在外部區塊工作?

當我登錄到控制檯 onmouseout觸發

被解僱,其中兩個e.targete.currentTarget是DIV本身,事件觸發兩次,首先在進入股利,然後離開股利。

首先,這對我沒有意義 - 爲什麼會發生?第二,這裏使用的是標準邏輯嗎?


所有HTML生成 這裏是一些代碼,創建模式和連接的 mouseout觸發

 
// code creates the modal div from the menu 
get: function(e) { 
     util.popup(E.h4("Maintenance Menu:"), 
      E.ul( E.a('#', maintenance.users, 'Users (Logins)'), 
        E.a('#', maintenance.employees, 'Employees'), 
        E.a('#', maintenance.skills, 'Skill Types'), 
        E.a('#', maintenance.etps, 'Expense Types'), 
        E.a('#', maintenance.menus, 'Menu Items')), 
      E.div( E.button(maintenance.done, "s.width:90%", "Finished"))); 
     util.popup_dom().addEventListener('mouseout',util.popout()); 
     }, 

popup()創建模式,並把它放在BODY,popout()刪除它。


溶液(按第一個答案 - 謝謝!)使用mouseover設置mouseout

: 
util.popup(...); 
var outSet = false; // whether mouseout trigger has been set 
util.popup_dom().addEventListener('mouseover',function(e) { 
    if(!outSet) { 
     setTimeout(function() { 
     util.popup_dom().addEventListener('mouseout',function(e){util.popout();}), 
     200); 
     outSet = true; 
    } 
}); 
+0

分享HTML,並告訴我們你希望它在'mouseout'之前和之後。 – Shef

+0

@Shef - 這裏是代碼片段 - 不知道這是你在 –

回答

1

你只能註冊onmouseout監聽onmouseover

var closeModalDiv = function() { ... }; 

addEventListener(modalDiv, 'mouseover', function() { 
    addEventListener(modalDiv, 'mouseout', closeModalDiv); 
}); 

(這是假設你'使用一個名爲addEventListener的自定義,跨瀏覽器事件方法;您必須調整它,然而它是你的註冊事件。)

+0

之後所以我認爲'mouseover'事件反覆發射。 _and_ afaik無法拉或以其他方式知道存在的觸發器 –

+1

1.如果您使用體面的跨瀏覽器事件方法,則不會爲同一事件的同一元素添加相同的函數多次。 2.如果你沒有使用匿名函數,你可以在執行一次後移除'mouseover'偵聽器。 – sdleihssirhc

+0

遵循了你的建議,但增加了一些東西:一個標誌,是否已經添加了「mouseout」觸發器,以防止它被重置,並在'mouseover'後20ms添加觸發器以防止它過早發射。 - 謝謝!使用'addEventListener'的 –

相關問題