我最近做了这个简单的导航,你有几个有下拉列表的链接。首先它只在CSS3中,但后来我决定添加一些jQuery,以便在一段时间后显示下拉列表。 (大多数jQuery代码都基于另一个线程中给出的答案)
基本上,我的问题是我无法将正确的元素作为目标,因此当我悬停一个li元素时,我的所有下拉列表都会显示出来。我尝试尽可能多地调整它,但我找不到合适的代码。
非常感谢任何回复!
我的菜单如下:
<ul id="generale">
<li><a href="#">Item 1</a></li>
<li><a href="#">Item 2</a></li>
<li>
<a href="#">Item 3</a>
<ul>
<li><a href="#">Subitem 1</a></li>
<li><a href="#">Subitem 2</a></li>
<li><a href="#">Subitem 3</a></li>
<li><a href="#">Subitem 4</a></li>
<li><a href="#">Subitem 5</a></li>
</ul>
</li>
<li>
<a href="#">Item 4</a>
<ul>
<li><a href="#">Subitem 1</a></li>
<li><a href="#">Subitem 2</a></li>
<li><a href="#">Subitem 3</a></li>
<li><a href="#">Subitem 4</a></li>
<li><a href="#">Subitem 5</a></li>
</ul>
</li>
<li><a href="#">Item 5</a></li>
<li><a href="#">Item 6</a></li>
</ul>
和我的jQuery:
var navTimers = [];
$( "#generale > li" ).hover(
function () {
var id = jQuery.data( this );
var $this = $( this );
navTimers[id] = setTimeout( function() {
$('#generale ul').fadeIn(200);
navTimers[id] = "";
}, 300 );
},
function () {
var id = jQuery.data( this );
if ( navTimers[id] != "" ) {
clearTimeout( navTimers[id] );
} else {
$('#generale ul').fadeOut(200);
}
}
);
答案 0 :(得分:1)
您的fadeIn和fadeOut函数目前定位于ul
元素中的所有#generale
。
尝试更改
$('#generale ul').fadeIn(200);
到
$this.find('ul').fadeIn(200);
和
$('#generale ul').fadeOut(200);
到
$this.find('ul').fadeOut(200); // you'll also have to define $this = $(this)