jquery delegate()事件(mouseover mouseout)触发两次

时间:2011-09-08 14:05:52

标签: javascript jquery delegates hover

我有以下脚本一直两次触发mouseover和mouseout! 你有什么建议我做错了(unbind,return eg)?我试了几件事但是 什么都没有帮助。

这是代码:

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

2 个答案:

答案 0 :(得分:7)

当你进入/离开元素的孩子时,

mouseovermouseout被触发,这可能就是你所看到的效果。

另一个问题是您将处理程序绑定到mouseover mouseenter(以及mouseleavemouseout)。< / p>

仅绑定到mouseentermouseleave。 jQuery已经在处理浏览器差异。

答案 1 :(得分:4)

我和.delegate();

有类似的东西

你签出了http://api.jquery.com/event.stopImmediatePropagation/吗?

它解决了我的问题。