2011-09-08 14 views
5

Aşağıdaki senaryoda mouseover ve mouseout'u her zaman iki kez ateşliyorum! Neyi yanlış yaptığımı mı söylüyorsunuz (yok ol, geri dön, ör.)? Birkaç şey denedim ama hiçbir şey yardımcı oldu.jquery delegate() olayları (mouseover mouseout) iki kez ateş ediyor

$('#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; 
}); 

cevap

7

mouseover ve mouseout bir girdiğinizde tetiklenen/öğenin bir çocuk bırakın belki bu Gördüğünüz etkisi var: Burada

kodudur.

Bir diğer sorun

Eğer hem işleyicisi bağlayıcı olmasıdır, mouseover ve mouseenter (ve mouseleave ve mouseout).

Yalnızca mouseenter ve mouseleave'a bağlanır. jQuery zaten tarayıcı farklılıkları ile ilgileniyor.

+1

Bu, iyi belgelenmemiş bir olay sorunudur ... Bunu söylediğin için teşekkürler. Bunu bulmak için gerçekten uzun bir zaman aldı. Benim durumumda, önerdiğiniz davranış (çocuk düğümlerine girdiğinizde/çıktığınızda mouseover & mouseout tekrar ateş ediyor) sadece IE'de (10) ortaya çıkıyor - tüm modern tarayıcılar sadece sağlanan eleman için bir olayı ele almakla ilgilendiğimi anlıyor gibi görünüyor. ve tüm çocukları için değil. StopPropagation/stopImmediatePropagation bile bunu benim için etkilemedi. – 1nfiniti