2016-12-24 1 views
1

jQueryを使用してドロップダウンメニューを表示しています。それは単一のメニューのために働いていて、適切なドロップダウンを表示しています。複数のメニューを使用すると、すべてのドロップダウンメニューが表示されます。私は、jQueryで同じクラスを渡しましたが、複数のメニューで同じクラスを使用するにはどうすればよいですか。出来ますか?Jqueryでドロップダウンメニューを表示するには?

スニペットで私の出力を確認してください。 Menu-1でhoverと入力すると、Menu-2とMenu-3のドロップダウンも表示されます。私はホバーするときに1つのドロップダウンを表示する必要があります。 jQueryを手伝ってもらえますか?ここで

は私の抜粋です:

$(function() { 
 
$(".menu").hover(
 
function() { $(".sub").slideToggle(400); }, 
 
function() { $(".sub").hide(); } 
 
); 
 
});
a{ 
 
text-decoration: none; 
 
} 
 

 
.menu{ 
 
font-family: Arial; 
 
color: #515151; 
 
position: relative; 
 
background-color: #763E9B; 
 
width: 100%; 
 
color: #fff; 
 
} 
 
.menu ul.main-menu{ 
 
    list-style: none; 
 
    float: right; 
 
} 
 

 
.menu li.main-list { 
 
margin: 20px; 
 
float: left; 
 
} 
 

 
.menu li a{ 
 
color: #515151; 
 
display: block; 
 
padding: 10px 15px; 
 
cursor: pointer; 
 
font-size: 14px; 
 
} 
 

 
.menu ul.sub-options li a:hover{ 
 
background: #f44141; 
 
color: #fff; 
 
/*margin: 20px;*/ 
 
} 
 

 
.sub{ 
 
background: #fff; 
 
position: absolute; 
 
z-index: 2; 
 
width: 200px; 
 
padding: 10px 0 3px; 
 
border-radius: 3px; 
 
box-shadow: 0 2px 4px #ddd; 
 
border: 1px solid #ddd; 
 
display: none; 
 
} 
 

 
a.hover-link{ 
 

 
font-size: 14px; 
 
color: #fff; 
 
z-index: 110; 
 
display: block; 
 
padding: 10px 0 1px 10px; 
 
cursor:pointer; 
 
border-radius: 5px 5px 0 0; 
 
font-weight: bold; 
 

 
} 
 
.sub-options{ 
 
list-style:none; 
 
margin:0px; 
 
padding:0px; 
 
font-size: 11px; 
 
} 
 

 

 
.square:before { 
 
    content: ""; 
 
    position: absolute; 
 
    left: 50%; 
 
    top: -10px; 
 
    width: 0; 
 
    height: 0; 
 
    border-style: solid; 
 
    border-width: 0; 
 
    border-color: transparent transparent #fae0bb transparent; 
 
    z-index: 9999; 
 
    transform: translateX(-50%) 
 
} 
 
.square:after { 
 
    content:""; 
 
    position: absolute; 
 
    right: 4px; 
 
    top: -22px; 
 
    width: 0; 
 
    height: 0; 
 
    border-style: solid; 
 
    border-width: 0 17px 17px 17px; 
 
    border-color: transparent transparent #ffffff transparent; 
 
    z-index:9998; 
 
} 
 
.square { 
 
    background: #fae0bb; 
 
    box-shadow: 0 3px 3px rgba(0, 0, 0, 0.2); 
 
    position: absolute; 
 
    margin: 0; 
 
    /*top: 2.8em;*/ 
 
    width: 200px; 
 
    z-index: 99999; 
 
    margin-top: 20px; 
 
} 
 

 
.menu:hover .square:before{ 
 
    border-width: 0 10px 10px 10px; 
 
}
<script src="http://code.jquery.com/jquery-1.8.2.js"></script> 
 

 
<div class='menu'> 
 
<ul class="main-menu"> 
 
<li class="main-list"><a class='hover-link'>Menu 1</a> 
 
<div class="square"> 
 
<div class='sub'> 
 
<ul class='sub-options'> 
 
<li><a href='#'>Home</a></li> 
 
<li><a href='#'>About</a></li> 
 
<li><a href='#'>Services</a></li> 
 
<li><a href='#'>Contact</a></li> 
 
</ul> 
 
</div> 
 
</div> 
 
</li> 
 

 
<li class="main-list"><a class='hover-link'>Menu 2</a> 
 

 
<div class="square"> 
 
<div class='sub'> 
 
<ul class='sub-options'> 
 
<li><a href='#'>Home</a></li> 
 
<li><a href='#'>About</a></li> 
 
<li><a href='#'>Services</a></li> 
 
<li><a href='#'>Contact</a></li> 
 
</ul> 
 
</div> 
 
</div> 
 
</li> 
 

 
<li class="main-list"><a class='hover-link'>Menu 3</a> 
 
<div class="square"> 
 

 
<div class='sub'> 
 
<ul class='sub-options'> 
 
<li><a href='#'>Home</a></li> 
 
<li><a href='#'>About</a></li> 
 
<li><a href='#'>Services</a></li> 
 
<li><a href='#'>Contact</a></li> 
 
</ul> 
 
</div> 
 
</div> 
 
</li> 
 

 
</ul> 
 

 
</div>

+0

あなたは.menuクラスでホバーを使用しています。別のクラスまたはIDを使用する必要があります。また、異なるサブクラスもあります。 –

+0

Mr.Leoさんに返信してくれてありがとうございます。 –

+0

a workarround [demo](https://jsfiddle.net/dtzv41q2/) –

答えて

4

あなたが個別に各要素をターゲットにする$(this)を使用する必要があります。同様に:

HTML::

<div class="menu"> 
    <ul>...<ul> 
    <ul>...<ul> 
    <div class="clear"></div> 
</div> 

はCSS:

.clear { 
    clear: both; 
} 

はを見てください.menu &を終了する前

$(function() { 
    $(".main-list").hover(
    function() { $(this).find('.sub').slideToggle(400); }, 
    function() { $(this).find('.sub').hide(); } 
); 
}); 

はそれにclear: both CSSルールを適用<div class="clear">を追加します下のスニペット:

$(function() { 
 
    $(".main-list").hover(
 
    function() { $(this).find('.sub').slideToggle(400); }, 
 
    function() { $(this).find('.sub').hide(); } 
 
); 
 
});
.clear { 
 
    clear: both; 
 
} 
 

 
a{ 
 
\t text-decoration: none; 
 
} 
 

 
.menu{ 
 
\t font-family: Arial; 
 
\t color: #515151; 
 
\t position: relative; 
 
\t background-color: #763E9B; 
 
\t width: 100%; 
 
\t color: #fff; 
 
} 
 
.menu ul.main-menu{ 
 
\t list-style: none; 
 
\t float: right; 
 
} 
 

 
.menu li.main-list { 
 
\t margin: 20px; 
 
\t float: left; 
 
\t position: relative; 
 
} 
 

 
.menu li a{ 
 
\t color: #fff; 
 
\t display: block; 
 
\t padding: 10px 15px; 
 
\t cursor: pointer; 
 
\t font-size: 14px; 
 
} 
 

 
.menu ul.sub-options li a { 
 
    color: #151515; 
 
} 
 

 
.menu ul.sub-options li a:hover{ 
 
\t background: #f44141; 
 
\t color: #fff; 
 
\t /*margin: 20px;*/ 
 
} 
 

 
.sub{ 
 
\t background: #fff; 
 
\t position: absolute; 
 
\t z-index: 2; 
 
\t width: 200px; 
 
\t padding: 10px 0 3px; 
 
\t border-radius: 3px; 
 
\t box-shadow: 0 2px 4px #ddd; 
 
\t border: 1px solid #ddd; 
 
\t display: none; 
 
} 
 

 
a.hover-link{ 
 

 
\t font-size: 14px; 
 
\t color: #fff; 
 
\t z-index: 110; 
 
\t display: block; 
 
\t padding: 10px 0 1px 10px; 
 
\t cursor:pointer; 
 
\t border-radius: 5px 5px 0 0; 
 
\t font-weight: bold; 
 

 
} 
 
.sub-options{ 
 
\t list-style:none; 
 
\t margin:0px; 
 
\t padding:0px; 
 
\t font-size: 11px; 
 
} 
 

 

 
.square:before { 
 
\t content: ""; 
 
\t position: absolute; 
 
\t left: 50%; 
 
\t top: -10px; 
 
\t width: 0; 
 
\t height: 0; 
 
\t border-style: solid; 
 
\t border-width: 0; 
 
\t border-color: transparent transparent #fae0bb transparent; 
 
\t z-index: 9999; 
 
\t transform: translateX(-50%) 
 
} 
 
.square:after { 
 
\t content:""; 
 
\t position: absolute; 
 
\t right: 4px; 
 
\t top: -22px; 
 
\t width: 0; 
 
\t height: 0; 
 
\t border-style: solid; 
 
\t border-width: 0 17px 17px 17px; 
 
\t border-color: transparent transparent #ffffff transparent; 
 
\t z-index:9998; 
 
} 
 
.square { 
 
\t background: #fae0bb; 
 
\t box-shadow: 0 3px 3px rgba(0, 0, 0, 0.2); 
 
\t position: absolute; 
 
\t margin: 0; 
 
\t left: 50%; 
 
\t transform: translateX(-50%); 
 
\t /*top: 2.8em;*/ 
 
\t width: 200px; 
 
\t z-index: 99999; 
 
\t margin-top: 20px; 
 
} 
 

 
.main-list:hover .square:before{ 
 
\t border-width: 0 10px 10px 10px; 
 
}
<script src="http://code.jquery.com/jquery-1.8.2.js"></script> 
 

 
<div class='menu'> 
 
\t <ul class="main-menu"> 
 
\t \t <li class="main-list"><a class='hover-link'>Menu 1</a> 
 
\t \t \t <div class="square"> 
 
\t \t \t \t <div class='sub'> 
 
\t \t \t \t \t <ul class='sub-options'> 
 
\t \t \t \t \t \t <li><a href='#'>Home</a></li> 
 
\t \t \t \t \t \t <li><a href='#'>About</a></li> 
 
\t \t \t \t \t \t <li><a href='#'>Services</a></li> 
 
\t \t \t \t \t \t <li><a href='#'>Contact</a></li> 
 
\t \t \t \t \t </ul> 
 
\t \t \t \t </div> 
 
\t \t \t </div> 
 
\t \t </li> 
 

 
\t \t <li class="main-list"><a class='hover-link'>Menu 2</a> 
 

 
\t \t \t <div class="square"> 
 
\t \t \t \t <div class='sub'> 
 
\t \t \t \t \t <ul class='sub-options'> 
 
\t \t \t \t \t \t <li><a href='#'>Home</a></li> 
 
\t \t \t \t \t \t <li><a href='#'>About</a></li> 
 
\t \t \t \t \t \t <li><a href='#'>Services</a></li> 
 
\t \t \t \t \t \t <li><a href='#'>Contact</a></li> 
 
\t \t \t \t \t </ul> 
 
\t \t \t \t </div> 
 
\t \t \t </div> 
 
\t \t </li> 
 

 
\t \t <li class="main-list"><a class='hover-link'>Menu 3</a> 
 
\t \t \t <div class="square"> 
 

 
\t \t \t \t <div class='sub'> 
 
\t \t \t \t \t <ul class='sub-options'> 
 
\t \t \t \t \t \t <li><a href='#'>Home</a></li> 
 
\t \t \t \t \t \t <li><a href='#'>About</a></li> 
 
\t \t \t \t \t \t <li><a href='#'>Services</a></li> 
 
\t \t \t \t \t \t <li><a href='#'>Contact</a></li> 
 
\t \t \t \t \t </ul> 
 
\t \t \t \t </div> 
 
\t \t \t </div> 
 
\t \t </li> 
 

 
\t </ul> 
 
    <div class="clear"></div> 
 

 
</div>

この情報がお役に立てば幸い!

+0

素晴らしい1 ..私は$ thisを追加することを忘れます。 :) –

+0

Mr.Sauravに返信してくれてありがとう、私の問題は100%解決しました。私はもう1つの助けが必要です。幅100%の背景色を表示する必要があります。 .menuクラスでは、バックグラウンドと幅を追加しましたが、動作しません。これでも私を助けてください.Please –

+0

@NarendraVerma私の答えを更新しました。背景色を与えた後、リストの ':after'のためにメニュー項目の下にいくつかの矢印が現れます。見てみましょう。これがあなたを助けたら、この回答を受け入れることを忘れないでください。 –

関連する問題