2017-07-15 15 views
0

私のWeb開発者向けポートフォリオの模擬サイトで作業しています。 JavascriptとJQueryの経験はあまりありませんが、Navメニューのドロップダウンを表示したり非表示にする最も効率的な方法を見つけようとしています。私のJQueryは動作していないので、誰かがヒントを持っているかどうかを知りたかった。また、私は最初のUlのすべての楽器のドロップダウンを作成する予定です。複数列のドロップダウンの表示と非表示

HTML:

<body> 
<div class="container-fluid"> 
    <div id="main-page"> 
    <ul id="main-menu"> 
     <li class="main-menu-list-items" style="border: 1px solid black;"> 
     <div class="dropdown"> 
     <ul> 
     <li><a href="#" onclick="myFunction()" class="drop">Products</a></li> 
     <div id="myDropdown" class="dropdown-content"> 
      <ul> 
      <li class="dropdown-submenu"><a onclick="myClarinetDrop()" class="clarinet-drop" href="#">Clarinet</a> 
      <div id="my-clarinet-dropdown" class="dropdown-content"> 
      <ul> 
       <li><a href="#">Bb Clarinet</a></li> 
       <li><a href="#">Bb Bass Clarinet</a></li> 
       <li><a href="#">Eb Clarinet</a></li> 
       <li><a href="#">Alto Clarinet</a></li> 
       <li><a href="#">Bb German Clarinet</a></li> 
       <li><a href="#">Bb Contrabass Clarinet</a></li> 
      </ul> 
      </li> 
      <li><a href="#">Saxophone</a></li> 
      <li><a href="#">Flute</a></li> 
      <li><a href="#">Bassoon</a></li> 
      <li><a href="#">Recorder</a></li> 
      <li><a href="#">Brass</a></li> 
      <li><a href="#">Guitar</a></li> 
      <li><a href="#">Piano</a></li> 
      <li><a href="#">Orchestral</a></li> 
      <li><a href="#">Percussion</a></li> 
      </div><!--closes "myDropdown"--> 
      </ul> 
     </div><!--closes dropdown--> 
     </li> 
     <li class="main-menu-list-items"style="border: 1px solid black;"> 
     <span>Shop By Brands</span> 
     </li> 
     <li class="main-menu-list-items" style="border: 1px solid black;"> 
     <span>How To Order</span> 
     </li> 
     <li class="main-menu-list-items" style="border: 1px solid black;"> 
     <span>Quick Order</span> 
     </li> 
     <li class="main-menu-list-items" style="border: 1px solid black;"> 
     <span>About Us</span>  
     </li> 
    </ul><!--closes "main-menu"--> 
    </div><!--closes "main-page"--> 
    </div><!--closes "container-fluid"--> 
</body> 

はCSS:

body { 
    margin:0; 
    padding:0; 
} 

.main-menu-list-items { 
    list-style-type:none;/*removes bullet point*/ 
    float:left;/*puts list items side by side -- with no spaces*/ 
    padding:15px 75px; 
} 
.dropdown { 
    position: relative; 
    display: inline-block; 
} 
.dropdown >ul { 
    margin-left:-40px; 
} 
/* Dropdown Content (Hidden by Default) */ 
.dropdown-content { 
    display:none; 
    position: absolute; 
    min-width: 1154px; 
    border:1px solid black; 
    margin-left:-76px; 
    margin-top:15px; 
    height:50px; 
    list-style-type:none; 
} 
.dropdown-content > ul { 
    list-style-type:none; 
} 
.dropdown-content >ul >li { 
    position:relative; 
    float:left; 
    padding:15px 29px; 

} 
.dropdown-submenu > div > ul > li { 
    position:relative; 
    float:left; 
    padding:15px 52px 0 30px; 
} 

.dropdown-submenu > div > ul { 
    border:1px solid black; 
    height:50px; 
    margin-left:-70px; 
    bottom:-54px; 
    min-width: 1114px; 
    position:absolute; 
    list-style-type:none; 
    display:none; 

} 

/*ユーザーがドロップダウンボタンをクリックするとドロップダウンメニューが(.dropdown-コンテンツコンテナにこのクラスを追加するために、JSを使用して表示します)*/ .SHOW {表示:ブロック;}

はJQuery:

$(' .main-menu-list-items > .dropdown').click(function() { 
    var submenu = $(this).children('.dropdown > ul'); 
if($('.dropdown-content').css('display') == 'none') { 
    $(submenu).show(); 
    } 
    else { 
    $(submenu).hide(); 
    } 
}); 

答えて

0

1つのサブメニューを開く場合は、クラスを追加するだけで十分です。子要素(.dropdown-content)を表示するには、別のCSSルールを追加します。そのクラスを削除すると、子ノードは再び非表示になります。あなたのコードを少し書き直し、その目的を改善しました。

$('.main-menu-list-items > .dropdown').click(function() { 
    var $this = $(this); // performance, so we do not have to call $(this) multiple times 
    if(!$this.hasClass('show')) { 
     $this.addClass('show'); 
    } else { 
     $this.removeClass('show'); 
    }  
}); 

これをCSSに追加します。以前ごCSS以内に、この要素が隠されているので、これは動作します:

.show .dropdown-content { 
    display: block; 
} 

をサイドノートとして:onclick="myFunction()"を削除します。この関数は定義されていないので、コンソールにのみエラーが表示されます。

0

最初に修正したいことは、あなたのHTMLです。 ulの唯一の直接的な子孫はliですが、divを削除してください。また、あなたのHTMLにいくつかのインスタンスがあり、あなたの閉じ括弧が間違った場所にあるので、無効なHTMLが作成されます。

ここではメニューのための単純な形式ですが、あなたがそれを使用するようにCSSをやり直す必要があるだろう:あなたは、

<nav> 
    <ul> 
    <li class="dropdown"> 
     <a href="#" >Products</a> 
     <ul class="sub-menu"> 
     <li class="dropdown"> 
      <a href="#">Clarinet</a> 
      <ul class="sub-menu"> 
      <li><a href="#">Bb Clarinet</a></li> 
      <li><a href="#">Bb Bass Clarinet</a></li> 
      <li><a href="#">Eb Clarinet</a></li> 
      <li><a href="#">Alto Clarinet</a></li> 
      <li><a href="#">Bb German Clarinet</a></li> 
      <li><a href="#">Bb Contrabass Clarinet</a></li> 
      </ul> 
     </li> 
     <li> 
      <a href="#">Saxophone</a> 
     </li> 
     <li> 
      <a href="#">Flute</a> 
     </li> 
     <li> 
      <a href="#">Bassoon</a> 
     </li> 
     <li> 
      <a href="#">Recorder</a> 
     </li> 
     <li> 
      <a href="#">Brass</a> 
     </li> 
     <li> 
      <a href="#">Guitar</a> 
     </li> 
     <li> 
      <a href="#">Paino</a> 
     </li> 
     <li> 
      <a href="#">Orchestral</a> 
     </li> 
     <li> 
      <a href="#">Percussion</a> 
     </li> 
     </ul> 
    </li> 
    <li> 
     <a href="#">Shop By Brands</a> 
    </li> 
    <li> 
     <a href="#">How to Order</a> 
    </li> 
    <li> 
     <a href="#">Quick Order</a> 
    </li> 
    <li> 
     <a href="#">About Us</a> 
    </li> 
    </ul> 
</nav> 

その後、関係なく、それが入れ子になっていますどのように多くの回数の、サブメニューを表示します

$('.dropdown').on('click', function() { 
    $(this).children('.sub-menu').toggleClass('hideSubMenu'); 
}); 
0

この質問で私を助けてくれてありがとうございます!

エラーが多かったので、HTMLを完全に再作成しました。

HTML:

<nav> 
    <ul id="main-bar"> 
    <li class="dropdown"> 
     <a href="#">Product</a> 
     <!--sub-menu will hold all contents in dropdown --list items--> 
     <ul id="product-bar" class="sub-menu"> 
     <li><a href="#">Clarinet</a></li> 
     <li><a href="#">Saxophone</a></li> 
     <li><a href="#">Flute</a></li> 
     <li><a href="#">Bassoon</a></li> 
     <li><a href="#">Recorder</a></li> 
     <li><a href="#">Brass</a></li> 
     <li><a href="#">Guitar</a></li> 
     <li><a href="#">Piano</a></li> 
     <li><a href="#">Orchestral</a></li> 
     <li><a href="#">Percussion</a></li> 
     </ul><!--closes product-bar--> 
    </li><!--closes product list item that is holding all the products--> 
    <li><a href="#">Shop By Brands</a></li> 
    <li><a href="#">How to Order</a></li> 
    <li><a href="#">Quick Order</a></li> 
    <li><a href="#">About Us</a></li> 
    </ul><!--closes main-bar--> 
</nav> 

だけでなくI再でした私のCSS:

body { 
    margin:0; 
    padding:0; 
} 

#main-bar { 
    list-style-type:none;/*removes bullets*/ 
    height:50px;/*sets height of main-bar to same height as li's in #main-bar*/ 
} 

#main-bar > li { 
    float:left;/*puts list items next to each other*/ 
    border:1px solid black; 
    padding:15px 80px; 
} 

#main-bar > li > a { 
    text-decoration:none;/*removes underline from link*/ 
} 

#product-bar { 
    position: absolute; 
    min-width: 1154px 
    border:1px solid black; 
    margin-left:-81px; 
    margin-top:15px; 
    height:50px; 
    list-style-type:none; 
    display:none 
} 

#product-bar > li { 
    float:left; 
    padding:15px 30px; 
} 

#product-bar > li > a { 
    text-decoration:none; 
} 

.show #product-bar { 
    display:block; 
} 

そして最後に、私はjQueryの

jQueryのためのこのアプローチに行きました:

$('.dropdown').on('click', function() { 

var $this = $(this);times 
    if(!$this.hasClass('show')) { 
     $this.addClass('show'); 
    } else { 
     $this.removeClass('show'); 
    }  
}); 
関連する問題