2009-04-16 9 views
1

最初のレベルのメニュー項目がli要素で、2番目のレベルが独自のli要素を持つulブロックである単純なメニューを作成しようとしています。本当に明るいものはありません。 Cssにはすべてのサブメニューでdisplay:noneが含まれていました。私の(楽観的)考え方は、mouseoverがSUBmenu(ul要素)で発生したときにマウスオーバーが発生したときに適切なul要素を表示し、私は何が起こったのか理解するためにいくつかの問題があります。 Firefoxではすべてがうまく動作しています:最初のレベルメニューに入力 - サブメニューに入る - サブメニューから終了すると、適切なイベントシーケンスがトリガーされたことが示されます:menuOn subMenuOn subMenuOff menuOff。なぜ私はIEで同じイベントシーケンスsubMenuOff突然subMenuOnの後にトリガーされて理解できません:結果は、サブメニューがすぐに消えているということです。カップル(subMenuOn subMenuOff)がトリガーされて同じ時間にサブメニューを無効にするようなものです。マウスオーバーまたはマウスセンターを使用して変更はありません。ホバーを使用しても状況は変わりません。何が起こったのか考えてみましょうか?これはコードです:Jqueryメニュー:mouseover/mouseout moseenter/mouseleave craziness

$(document).ready(
     function(){ 
     enableMenu();       
    } 
); 

var flagOnSubMenu = false; 

function enableMenu(){ 
    $('li.menu').bind('mouseenter', menuOn);    
    $('li.menu').bind('mouseleave', menuOff);   
    $('ul.sottomenu').bind ('mouseenter', subMenuOn); 
    $('ul.sottomenu').bind ('mouseleave', subMenuOff); 
} 

function menuOn(){ 
    scrivi('menuOn'); 
    if (flagOnSubMenu){ 
     scrivi('noAction'); 
     return; 
    } 

    var subMenuId; 

$('ul.sottomenu').hide();            
     subMenuId = $(this).find("ul").attr('id'); 
     $('#' + subMenuId).show(); 


} 

function menuOff(){ 
    scrivi('menuOff<br>'); 
    return; 
} 

function subMenuOn(){ 
    scrivi('subMenuOn'); 
    flagOnSubMenu = true; 
} 

function subMenuOff(){ 
    scrivi('subMenuOff'); 
    flagOnSubMenu = false; 
    $(this).hide();    
} 

function scrivi(arg){ 
    $('#debug').html($('#debug').html() + ' ' + arg); 
} 

答えて

1

一部のブラウザ/フレームワークはイベントをバブルしますが、一部はそうしません。

(つまり、AFAブラウザにはどの方向に進むのかわかりません)マウスが要素から子要素に移動すると、1つのブラウザがマウス出力をトリガーします。もう1つは、親要素によってもキャッチされることができるマウスオーバーをトリガーしませんが、トリガーします。

+0

それについてはわかりません。子要素に移動するときに問題を解決するはずのホバー機能も使用しました。動作しませんでした。 – Daniel

3

mouseoverイベントとmouseoutイベントに狂った問題がありました。

$("#menu>li").hover(
    function(){ 
     $("#menu *:animated").stop(true,true).hide(); //stop the madness 
     $('ul',this).slideDown(); 
    }, 
    function(){ 
     $('ul',this).slideUp("fast"); 
    } 
); 

アニメーションを停止することが私の鍵でした。それがなければ、アニメーションは私のメニューをマウスで終了した後も長く発射されるでしょう。