2016-10-30 8 views
0

コードの最初のブロックが開き、同時に.main-navigationを閉じ、同時に影のオーバーレイをページに重ねます。しかし、私が達成したいのは、ナビゲーション外のどこかをクリックして、メニューが開いてオーバーレイがページ上にある場合にのみ(メニューを閉じてオーバーレイを削除する)、同じアクションを実行することです。要素の外側をクリックしたときにクラスを切り替える方法Jquery

フィドル:常にfalseをもたらしif文、その中に$(document).click()火災、しばらくしてhttps://jsfiddle.net/bfgb951w/

<header id="ovlay"> 
      <span class="nav-toggle eq">&equiv;</span> 
      <nav class="main-navigation"> 
       <span class="nav-toggle">&times;</span> 
       <ul class="menu"> 
        <li><a href="#about" class="slide-section">About</a></li> 
        <li><a href="#works" class="slide-section">Works and stuff</a></li> 
        <li><a href="#contact" class="slide-section">Contact</a></li> 
       </ul> 
      </nav> 
     </header> 

$(document).ready(function(){ 
    $('.nav-toggle').on('click', function(){ 
     $('.main-navigation').toggleClass('open'); 
     $('#ovlay').toggleClass('overlay'); 
    }); 
}); 

$(document).click(function(){ 
    if($('.nav-toggle').hasClass('open')) { 
     $('.main-navigation').toggleClass('open'); 
     $('#ovlay').toggleClass('overlay'); 
    } 
}); 
+1

問題を示す実例を提供してください。 – Dekel

+1

[要素外のクリックを検出する方法]の可能な複製?(http://stackoverflow.com/questions/152975/how-to-detect-a-click-outside-an-element) – Vasis

+0

質問がありましたらまあ、あなたはぼかしやフォーカスのようなイベントを使うことができます。それは働くだろうか? –

答えて

1

あなたは.nav-toggle要素にopenクラスを設定することはありません。

$(document).ready(function(){ 
    $('.nav-toggle').on('click', function(){ 
     $('.main-navigation').toggleClass('open'); 
     $('#ovlay').toggleClass('overlay'); 
     return false; 
    }); 
}); 

$(document).click(function(event){ 
    if($('.main-navigation').hasClass('open') && $(event.target).closest(".main-navigation").length == 0) { 
     $('.main-navigation').toggleClass('open'); 
     $('#ovlay').toggleClass('overlay'); 
    } 
}); 

チェックこのフィドル:https://jsfiddle.net/1n78d9jq/

注クリックメインメニュー自体にあるときに閉鎖を防ぐdocument.clickで追加チェックをし、それを変更します。

+0

hmは開いたクローズのために働くようだが、私はそれの上のリンクをクリックするとメニューが閉じます.. – Smithy

+0

ああ申し訳ありません私のブラウザでは、これはフィドルでのみ起こります。ありがとうございました! P.S. "返品偽"がなぜ重要なのか、なぜ( ".main-navigation")なのか説明してください。length == 0? – Smithy

+1

falseを返さない場合は、メニューのクリックもドキュメントのクリックとしてカウントされます。長さチェックは、メニュー自体のどこかをクリックするとクローズしないようにします。 – Robba

関連する問題