2011-09-08 233 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