2011-09-08 20 views
5

Tengo el siguiente guión disparando mouseover y mouseout siempre dos veces! ¿qué sugieres que hago mal (desvincular, devolver, por ejemplo)? Probé algunas cosas, pero nada ayudó.jquery delegate() eventos (mouseover mouseover) se dispara dos veces

Aquí está el código:

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

Respuesta

7

mouseover y mouseout una activa cuando se introduce/Escribir un hijo del elemento, tal vez eso es el efecto que está viendo.

Otro problema es que va a enlazar el controlador a la vez, mouseoverymouseenter (y mouseleave y mouseout).

Unir solo a mouseenter y mouseleave. jQuery ya se está ocupando de las diferencias del navegador.

+1

Este es un problema de evento mal documentado ... Gracias por mencionarlo. Me tomó mucho tiempo encontrar esto. En mi situación, el comportamiento que sugieres (mouseover y mouseout disparando nuevamente cuando ingresas/dejas nodos secundarios) solo ocurre en IE <10 - todos los navegadores modernos parecen entender que solo estoy interesado en manejar un evento para el elemento proporcionado y no para todos sus hijos Incluso stopPropagation/stopImmediatePropagation no me afectó. – 1nfiniti

Cuestiones relacionadas