2012-04-07 14 views
0

menuItemリストの上にマウスカーソルを移動すると、サブメニューが表示されてから再びmouseout hideになります。質問は、クリックしたmenuItem内で、特定のサブメニューをどのようにターゲットにするのですか(サブメニュー付きのメニュー項目が多いと仮定します)。mouseover jquery上の子要素のクラス名を取得

HTML

<ul> 
<li class="menuItem"> 
Menu Item 1 
<ul class="subMenu"> 
<li> <a href="#"> Link 1 </a> </li> 
<li> <a href="#"> Link 2 </a> </li> 
</ul> 
</li> 

javascriptの

$(document).ready(function() { 
$('.menuItem').mouseover(function() { 


$($this).class('.subMenu').show(); 

}); 
}); 

答えて

0

用途:

$(this).find('.subMenu').show(); 

の代わり:

$($this).class('.subMenu').show(); 
+0

あなたの答えはもう少し説明できますか? OPが少し良くなるのを助けるかもしれない。 – KLee1

4

試行:

$('.menuItem').hover(
    function(){ 
     // first function is for the mouseover/mouseenter events 
     $(this).find('.subMenu').show(); 
    }, 
    function(){ 
     // second function is for mouseleave/mouseout events 
     $(this).find('.subMenu').hide(); 
    }); 

JS Fiddle demo

それはあなたが(あなたは、以下IE6やなどのブラウザをサポートするために持っていない限り)、このために、すべてのJavaScriptを使用する必要はありません、とだけCSSを使用することができることを指摘する価値がある:

.menuItem:hover .subMenu, 
.subMenu:hover { 
    display: list-item; 
} 
.subMenu { 
    display: none; 
}​ 

JS Fiddle demo

参考文献:

+0

hover()を2回呼び出す代わりに、toggle()を使用してください: $( '。menuItem')。 –

+0

なぜですか?私は 'hover()'を一度呼びます。 ...私は何かを逃していない限り? –

+0

申し訳ありませんが、明示的なmouseleave関数を使用する代わりに意味します。 toggle()は非表示を示し、表示される要素を隠すので、toggle()で十分です。 –

2

デビッド・トーマスtoggle()を使用するソリューション、そして唯一の内側の関数のA、わずかに異なるバージョン:

$('.menuItem').hover(function(){ 
    $(this).find('.subMenu').toggle(); 
}); 

あなただけ.subMenuを表示または非表示にしたいので、あなただけの1の内側の機能を必要とし、そのマウスオーバーとマウス離しで呼び出されます。明示的にマウス・リーブ機能を書いておきたいのであれば、おそらく個人的な好みの問題ですが、私はこの短いバージョンが好きです。

関連する問題