2011-09-08 22 views
5

私はmouseoverとmouseoutを常に2回発射する以下のスクリプトを持っています! 私は間違っていると示唆しています(アンバインド、返品など)?私はいくつかのことを試みたが、 何も助けなかった。ここjquery delegate()イベント(mouseover mouseout)が2回発生します

コードです:

$('#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で発生しているに過ぎません。すべての現代のブラウザは、私が提供された要素すべての子どものためではありません。 stopPropagation/stopImmediatePropagationはこれに影響しませんでした。 – 1nfiniti

関連する問題