2011-09-08 8 views
5

ho il seguente script sparando passaggio del mouse e mouseout sempre due volte! cosa suggerisci di fare male (unbind, return ad esempio)? ho provato un paio di cose, ma niente aiutato.jquery delegato() eventi (mouseover mouseout) spara due volte

ecco il codice:

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

risposta

7

mouseover e mouseout una attiva quando si inserisce/Lascia un figlio dell'elemento, forse è l'effetto che si sta vedendo.

Un altro problema è che si sono vincolanti il ​​gestore ad entrambi, mouseoveremouseenter (e mouseleave e mouseout).

legano solo a mouseenter e mouseleave. jQuery si sta già occupando delle differenze tra browser.

+1

Questo è un problema evento scarsamente documentato ... Grazie per averlo menzionato. Mi ci è voluto davvero tanto tempo per trovarlo. Nella mia situazione, il comportamento che suggerisci (mouseover e mouseout che si attivano di nuovo quando entri/esci da nodi figlio) si verifica solo in IE <10 - tutti i browser moderni sembrano capire che sono interessato solo a gestire un evento per l'elemento fornito e non per tutti i suoi figli. Persino stopPropagation/stopImmediatePropagation non ha influenzato questo per me. – 1nfiniti

Problemi correlati