2011-12-28 65 views
0

好的,所以我有一個JavaScript下拉菜單。下拉菜單工作正常,但當我點擊下拉鍊接中的一個鏈接不起作用。我認爲這與我設置的「返回錯誤/真實」有關。返回假 - 鏈接不工作 - 下降

的Javascript:

function ddMenu_open(event) 
{ 
    ddMenu_close(); 
    var submenu = $(this).find('ul'); 
    if(submenu){ 
     ddmenuitem = submenu.css('visibility', 'visible'); 
     return false; 
    } 
    return true; 
} 

function ddMenu_close() 
{ if(ddmenuitem) ddmenuitem.css('visibility', 'hidden'); } 

function ddMenu_timer() 
{ closetimer = window.setTimeout(ddMenu_close, timeout); } 

function ddMenu_canceltimer() 
{ if(closetimer) 
    { window.clearTimeout(closetimer); 
     closetimer = null;}} 

$(document).ready(function() 
{ $('#ddMenu > li').bind('click', ddMenu_open); 
    $('#ddMenu li ul').bind('click', ddMenu_timer); 

}); 

document.onclick = ddMenu_timer; 
} 
</script> 

所以,當我刪除了「返回False」語句我聯繫工作,但後來我的下拉菜單不繼續開放。當我刪除返回虛假陳述時,下拉菜單將快速打開然後關閉(幾乎不給用戶時間來點擊一個項目)。我需要在這段代碼中進行更改,以便當我點擊下拉菜單時它保持打開狀態,然後當其中一個下拉項目/鏈接點擊時,鏈接實際上可以正常工作。

同樣,現在下拉功能正常工作(當它是單擊它保持打開,直到有另一個點擊),但是當我點擊下拉項目鏈接不起作用,新頁面不會加載。感謝您的幫助。

感謝您的回覆,但它仍然不適合我。這裏是我的全部代碼:

<script type="text/javascript"> 
function ddMenu() { 
var timeout = 500; 
var closetimer = 0; 
var ddmenuitem = 0; 

function ddMenu_open(e) 
{ 
    ddMenu_close(); 
    var submenu = $(this).find('ul'); 
    if(submenu){ 
     ddmenuitem = submenu.css('visibility', 'visible'); 


    } 

} 

function ddMenu_close() 
{ if(ddmenuitem) ddmenuitem.css('visibility', 'hidden'); } 

function ddMenu_timer() 
{ closetimer = window.setTimeout(ddMenu_close, timeout); } 

function ddMenu_canceltimer() 
{ if(closetimer) 
    { window.clearTimeout(closetimer); 
     closetimer = null;}} 

$(document).ready(function() 
{ $('#ddMenu > li').bind('click', ddMenu_open); 
    $('#ddMenu li ul').bind('click', ddMenu_timer); 


}); 

document.onclick = function(ev){ 
    if(ev.target.nodeName !== 'ul') { 
     ddMenu_close(); 
    } 
}; 


} 
</script> 

我想再次下拉menues關閉文檔時,除了點擊菜單本身被點擊時。謝謝。

+5

設置你的代碼的jsfiddle會有幫助。 – Jasper 2011-12-28 21:33:37

+0

看起來像'document.onclick = ddMenu_timer;'每次點擊時啓動計時器。 – Mathletics 2011-12-28 21:35:26

+0

'var submenu = $(this).find('ul'); if(submenu){}'這應該是'if(submenu.length){}'。 jQuery總是返回一個對象(即使它沒有元素)。 'if([])'和'if($())'都是真的。 – 2011-12-28 21:39:39

回答

0

而不是返回false你可以嘗試只是防止下拉菜單中像這樣的默認行爲:

function ddMenu_open(event) 
{ 
    ddMenu_close(e); 
    var submenu = $(this).find('ul'); 
    if(submenu){ 
     ddmenuitem = submenu.css('visibility', 'visible'); 
     return false; 
     e.preventDefault(); 
    } 
    return true; 
} 

注意:您不需要在ddMenu_open聲明參數而你不知道t需要在ddMenu_open結尾處返回true。但我明白你來自哪裏。這本書順便提一下你的速度:http://eloquentjavascript.net/

+0

我相信函數定義應該是:'function ddMenu_open(e)'如果您使用'e.preventDefault'。 – Rob 2011-12-28 21:48:36

+0

我嘗試了以上,我的鏈接仍然無法正常工作。 – user982853 2011-12-28 22:01:39

+0

請參閱上面的代碼 – user982853 2011-12-28 23:50:55