JQuery делегат () события (при наведении мыши) срабатывает дважды - PullRequest
5 голосов
/ 08 сентября 2011

у меня следующий скрипт запускает 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;   
});

Ответы [ 2 ]

7 голосов
/ 08 сентября 2011

mouseover и mouseout срабатывает при входе / выходе дочернего элемента, возможно, именно этот эффект вы видите.

Другая проблема заключается в том, что вы привязываете обработчик к mouseover и mouseentermouseleave и mouseout).

Свяжите только с mouseenter и mouseleave. jQuery уже позаботился о различиях в браузере.

4 голосов
/ 30 июня 2012

У меня было что-то похожее с .delegate ();

Вы проверили http://api.jquery.com/event.stopImmediatePropagation/?

Это исправило мою проблему.

...