2017-10-21 6 views
0

ドロップダウンメニューは、JSから追加された "is-open"というクラスを使用してCSSとHTML/JSで設計されています。指定されたHTML div内に存在すると、CSSをアクティブにしてサブメニューを表示します。外部メニューをクリックするとトグルクラスを削除する方法

ただし、クリックしたドロップダウンメニューは、同じメニュー項目をクリックしない限り消えないという小さな問題があります。

基本機能として、このメニューは、ユーザーがメニュー上でクリックすると消える必要がありますが、ページ上のどこにでも表示されます。

私の現在のjavascriptは以下の通りである。ここでは

$(document).ready(function() { 
    $(".has-submenu").click(function(e) { 
     e.stopPropagation(); 
     if($(this).hasClass("is-open")) { 
     $(this).removeClass("is-open"); 
     } else { 
     $(".has-submenu").removeClass("is-open"); 
     $(this).addClass("is-open"); 
     } 
    }); 
}); 

は、コードのcodepen例です:https://codepen.io/anon/pen/EwMjrz

+0

[HierはJavaScriptのみの良い例です](https://codepen.io/Ferhad/pen/OxZWNm) –

+0

@FerhadOthman解決策は機能しません。 divの外側をクリックすると、最初のメニュー項目(この場合は「記事」)が折りたたまれますが、後続のメニュー項目は影響を受けません。 https://codepen.io/hioioasd90/pen/qPwBEW – 109881

+0

行13 'var要素= document.querySelector("。has-submenu.is-open ");'セレクタはクラスがオープンである必要があります –

答えて

3

あなたはとても

のようなあなたのメニューを閉じるには、ドキュメントにイベントリスナーを追加することができます
$(document).ready(function() { 
    $(".has-submenu").click(function(e) { 
    e.stopPropagation(); 
    if($(this).hasClass("is-open")) { 
     $(this).removeClass("is-open"); 
    } else { 
     $(".has-submenu").removeClass("is-open"); 
     $(this).addClass("is-open"); 
    } 
    }); 
    $(document).on('click', function (e) { 
    e.stopPropagation(); 
    $('.has-submenu').removeClass("is-open"); 
    }); 
}); 

これはトリックを行う必要があります!

+0

私は持っています改訂コードをcodepen https://codepen.io/anon/pen/EwMjrzに追加しましたが、まだ動作していません。 – 109881

+1

セレクタが間違っていて、** WebsitePrimaryNav **の 'div'セクション内をクリックしてページ上の他の場所でクリックしていない場合にのみ、あなたのソリューションを実際にテストしていないと仮定します。 – NewToJS

+0

申し訳ありませんが、私は誤植を持った投稿を編集しました。 @ 109881で提供されているcodepenでテストしました(行にhas-submenuの前にドットを追加してください) – 3Dos

関連する問題