2012-04-05 13 views
1

私は以下のコードを使用して、アンカーをクリックするとナビゲーションメニューを表示/非表示にします。ユーザーがメニューをクリックしたときにメニューを非表示にする良い方法はありますか?

私が抱えている問題は、初めてページが読み込まれ、アンカーを2回クリックして表示する必要があるということです。その後、1回のクリックでメニューを切り替えることができます。私はまた、ドキュメント上の任意の場所にあるメニューをクリックして隠すことができます。

誰かが以下のコードに問題があるか、ユーザーがメニューをクリックしたときにメニューを非表示にする良い方法を知っていますか?

$('#aToggleQuickNavigation').click(function() { 
    $('#ulQuickNavigation').toggle(); 
}); 

$('html').click(function() { 
    if ($('#ulQuickNavigation').css('display') == 'block') { 
     $('#ulQuickNavigation').css('display', 'none'); 
    } 
    $('#aToggleQuickNavigation').click(function (event) { 
     event.stopPropagation(); 
    }); 
    $('#ulQuickNavigation li a').click(function (event) { 
     event.stopPropagation(); 
    }); 
}); 
+0

マウスオーバーで一般的にメニューの作業は、ページの任意の追加のポートをカバーしている場合、クリックしません。そうすると、マウスをクリックするとマウスが閉じず、閉じられませんでした。ここでユーザーエクスペリエンスを再考する必要があります。 –

+0

キーボードでナビゲートする人はいなくなります。私は本当にsuperfishのようなソリューションで燃えて行くことをお勧めします。 – steveax

+0

yuoはhtmlコードを提供できますか?私はあなたがクリックしないでホバリングを使用することをお約束したと思う。 –

答えて

1

隠すクリックイベントが体までのすべての方法を泡あれば、それは:

$("body").click(function(){ 
    $("#ulQuickNavigation").hide(); 
}); 

ユーザーがメニュー上の任意の場所をクリックすると、あなたはすでにそのクリックの伝播を防止すること、そうしています体はそれを聞くことはありません。そのようにそれは隠されません。

もう1つ注目すべきことは、HTML要素のclickイベントハンドラ内でクリックイベントをバインドしていることです。これはかなり問題になる可能性があります。クリックがHTML要素までバブルするたびに、ますます多くのクリックイベントがバインドされます。

ただ、今のところ、このような何かに固執:

// Any click that arrives at the body should close my navigation 
$("body").click(function(){ 
    $("#ulQuickNavigation").hide(); 
}); 

// Prevent clicks on nav from reaching the body 
$("#ulQuickNavigation").click(function(e){ 
    e.stopPropagation(); 
}); 
+0

ありがとうJonathan。これは私の問題を解決しました。奇妙なことに、私はサイトの別のセクションでhide()を使用しています。どのように私はそれを見落としたか分からない。なぜ私のコードがうまくいかなかったのか理解しようとすると、気が散ったようだ。乾杯。 – user1316222

0

あなたはjQueryのを使用してみましたがslideToggle機能に建てられましたか?

基本的にdisplay:noneの要素をとります。それをクリック(または変更ロジックを設定する場所)に表示します。

例:700あなたはスライドトグルを撮りたいミリ秒単位の時間である

$("#ID").slideToggle(700);

あなたの場合:

$('#aToggleQuickNavigation').click(function() { $('#ulQuickNavigation').slideToggle(500); });

+0

ありがとうMrShmee。私はこのインターフェイスのための非常に特定の要件を持っているので、slideToggleは適切ではありません。 – user1316222

関連する問題