【问题标题】:jquery delegate() events (mouseover mouseout) fires twicejquery delegate() 事件(mouseover mouseout)触发两次
【发布时间】:2011-09-08 14:05:52
【问题描述】:

我有以下脚本触发 mouseover 和 mouseout 总是两次! 你建议我做错什么(解除绑定,返回例如)?我尝试了一些东西,但是 没有任何帮助。

代码如下:

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

【问题讨论】:

    标签: javascript jquery delegates hover


    【解决方案1】:

    mouseovermouseout 在您进入/离开元素的子元素时触发,也许这就是您看到的效果。

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

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

    【讨论】:

    • 这是一个记录不充分的事件问题...感谢您提及。我花了很长时间才找到这个。在我的情况下,您建议的行为(当您进入/离开子节点时再次触发鼠标悬停和鼠标悬停)仅在 IE
    【解决方案2】:

    我有类似的东西 .delegate();

    你检查过http://api.jquery.com/event.stopImmediatePropagation/吗?

    它解决了我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-29
      • 1970-01-01
      • 2010-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-10
      • 2011-11-02
      相关资源
      最近更新 更多