2012-08-27 37 views
1

感謝你們延遲一個下拉菜單,我的菜單是現在可用,因爲菜單顯示足夠長的時間讓用戶得到他們的鼠標移動到鏈接。不幸的是,這不完全正確。即使用戶鼠標懸停,子菜單也會關閉。我已經添加了下面的HTML代碼以及修改後的js文件代碼。我想這個問題出現在$('。myMenu> li')中。bind('mouseout',closeSubMenu);線。也許另一種方法是在調用openSubMenu函數之後有一個超時延遲,在子菜單隱藏之前至少給用戶8秒左右。這對我來說是一個可以接受的解決方案。從隱藏

<!-- HTML menu code below --> 
<ul class="myMenu"> 
<li class="menuHeader"><a href="#">Employees <img src="images/arrowdown.gif" alt="Employee Links" width="11" height="8" border="0"/></a> 
<ul class="subMenu"> 
     <li><a href="#">Link1</a></li> 
     <li><a href="#">Link2</a></li> 
     <li><a href="#">Link3</a></li> 
     <li><a href="#">Link4</a></li>  
    </ul></li> 
</ul>  

<!-- js file code below --> 
$(document).ready(function() { 
    $('.myMenu > li').bind('mouseover', openSubMenu); 
    $('.myMenu > li').bind('mouseout', closeSubMenu); 

    function openSubMenu() { 
     $(this).find('ul').css('visibility', 'visible');  
    }; 

    function closeSubMenu() { 
     var ul = $(this).find('ul'); 
     setTimeout(function(){ 
     ul.css('visibility', 'hidden');}, 10000); 

    }; 

}); 

回答

1

你的setTimeout回調沒有做什麼,你應該把代碼放在回調函數中。 setTimeout不是像sleep

function closeSubMenu() { 
    var ul = $(this).find('ul'); 
    setTimeout(function(){ 
     ul.css('visibility', 'hidden'); 
    }, 2000); 
}; 
+0

謝謝!這解決了一個問題,但不幸產生了另一個問題基本上,我的菜單不會保持足夠長的時間讓用戶選擇一個選項。我將2000毫秒更改爲10000毫秒,但這在IE8中並不奏效。代碼:$('。myMenu> li')。bind('mouseout',closeSubMenu);即使用戶鼠標仍在其上,也會關閉子菜單。 – user1626240

0

嘗試類似的東西。如果你切換隱藏,那麼它會在隱藏之前延遲3秒。如果切換顯示,$(「#切換項目」)將清除隊列,並顯示該項目,

function toggle(show){ 

    if (show) { 

     $('#toggle-item').stop().clearQueue().show(); 

    } else { 

     $('#toggle-item').delay(3000); 
    } 
} 
0

setTimeout命令是這樣的setTimeout(the function to execute, delay in milliseconds)

所以,這是你需要什麼這樣做:

setTimeout($(this).find('ul').css('visibility', 'hidden'),3000);

注意,從$(this)'hidden')是實際的命令。如果不行,請試試這個:

 

    //place this in your <head> section 
    function closeDropDownFunction() { 
    $(this).find('ul').css('visibility', 'hidden'); 
    } 

    //then place this wherever the timeout needs to be 
    setTimeout(closeDropDownFunction(), 3000);