2011-09-08 126 views
5

我有以下腳本發射鼠標懸停和鼠標總是兩次! 你有什麼建議我做錯了(取消綁定,返回例如)?我嘗試了幾件事,但 沒有任何幫助。jQuery的委託()事件(鼠標懸停鼠標)兩次火災

這裏是代碼:

$('#container').delegate('div.showmenu', 'mouseover mouseenter mouseout mouseleave', function(e){ 
    if (e.type === 'mouseover' || e.type==='mouseenter') { //jIE requires mouseenter, does not fire mouseover         
     if($(this).parents().closest('div').hasClass('whatever')){    
      alert(e.type); //double-alerts mouseover 

      menu.show(); 

    foldercmenu.hover(
     function(){ 
      $(this).show();        
     }, 
     function(){ 
      $(this).hide();            
     } 
    );        

     }else { 
    //do other stuff :-) 
    }            
    }else if(e.type==='mouseout' || e.type==='mouseleave'){ //IE requires mouseleave, does not fire mouseout 
     alert(e.type); //double-alerts mouseout 
     menu.hide(); 
     $(this).unbind('mouseover mouseenter mouseout mouseleave'); 
    } 
    //return false; 
}); 

回答

7

mouseovermouseout一個當你進入觸發/離開元素的孩子,也許這就是你所看到的效果。

的另一個問題是,你要綁定的處理程序兩者mouseovermouseenter(和mouseleavemouseout)。

僅綁定到mouseentermouseleave。 jQuery已經在照顧瀏覽器的差異。

+1

這是一個記錄不完善的事件問題...感謝提到它。花了我很長時間才發現這一點。在我的情況下,你建議的行爲(mouseover&mouseout在你進入/離開子節點時再次發射)只在IE <10時出現 - 所有現代瀏覽器似乎都明白我只對處理所提供元素的事件感興趣,而不是所有的孩子。即使停止傳播/ stopImmediatePropagation也沒有影響到我。 – 1nfiniti