0

現在、このJavaScriptに苦労しています。

$(document).ready(function () {
        var visible = false;
        var body = false;

        $("body").mouseup(function () {
            if (visible) {
                $(this).parent().find("ul.subnav").slideUp('slow');
                visible = false;
                $(this).removeClass("clicked-background");
                body = true;
            }
        });

        $("ul.topnav li a").click(function () { //When trigger is clicked...
            var menu = $(this).parent().find('ul.subnav');

            if (!visible && !body) {
                $(this).parent().find("ul.subnav").slideDown('fast').show();
                visible = true;
                $(this).addClass("clicked-background");
            }
            // else if (visible) 
            //{
            //   $(this).parent().find("ul.subnav").slideUp('slow');
            //   visible = false;
            //   $(this).removeClass("clicked-background");
            // }

            body = false;
        });

    });

機能を追加したかったので、メニュー/ナビゲーションの外側をクリックすると、ドロップダウンが非表示になります。このコードの現在の問題は、メニューをクリックしてからメニューの外側をクリックすると、メニューをもう一度ダブルクリックして表示する必要があることです。これは、body変数が'True'ofcに設定されすぎていることが原因です。

メニューをクリックした場合に問題を修正しようとしてbody変数を作成し、同じリンクをもう一度クリックしました。メニューは最初に正しく開き、次に閉じてから再び開きます。スーの主な問題はです。ナビゲーションを開く->閉じる->開く

4

2 に答える 2

3

グローバル変数は使用しないでください。実際の要素が表示されているかどうかを確認してください

.is(':visible');

これは、現在使用しているさまざまなセレクターで使用できます。

于 2012-04-13T20:00:56.983 に答える
0

選択したイベントとして、「現在表示されている」メニューのオンマウスアウトを使用したくなるでしょう。

bodyタグからイベントを実行するのが良い方法だとは思いません。

流れは..

click (menu button or link)
show menu
set onmouseout for button and menu on click
onmouseout, remove onmouseout events
于 2012-04-13T20:03:36.047 に答える