悬停时出现下拉菜单,超时

时间:2012-06-26 17:39:47

标签: javascript jquery drop-down-menu navigation timeout

我最近做了这个简单的导航,你有几个有下拉列表的链接。首先它只在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);
                    }  
                }  
            );  

1 个答案:

答案 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)