2011-12-28 3 views
0

Итак, у меня есть раскрывающееся меню javascript. Выпадающее меню работает нормально, но когда я нажимаю одну из выпадающих ссылок, ссылка не работает. Я думаю, что это имеет какое-то отношение к моей настройке «return false/true».Return False - Ссылка Не работает - Drop Down

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> 

Так что, когда я удалить «возвращение ложным» заявление мои ссылки работают, но тогда мой выпадающее меню не остается открытым. Когда я удаляю возвращаемый ложный оператор, выпадающее меню будет открыто быстро, а затем закроется (едва пользовательское время щелкнет элемент). Что мне нужно изменить в этом коде, так что, когда я нажимаю на раскрывающееся меню, он остается открытым, а затем, когда один из выпадающих элементов/ссылок нажимает ссылку, на самом деле работает.

Опять же, сейчас функция раскрывающегося списка работает нормально (когда она нажимается, она остается открытой до тех пор, пока не появится другой щелчок), но когда я нажимаю на раскрывающийся элемент, ссылка не работает, новая страница не загружается. Спасибо за помощь.

спасибо за ответы, но он по-прежнему не работает для меня. Вот весь мой код:

<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> 

снова я хочу выпадающие менюшка, чтобы закрыть, когда документ нажми когда само меню нажато кроме. Благодарю.

+5

Было бы полезно настроить jsfiddle вашего кода. – Jasper

+0

Кажется, что 'document.onclick = ddMenu_timer;' запускает таймер каждый раз, когда вы нажимаете. – Mathletics

+0

'var submenu = $ (this) .find ('ul'); if (подменю) {} 'Это должно быть' if (submenu.length) {} '. jQuery всегда возвращает объект (даже если он не имеет элементов). 'if ([])' и 'if ($())' оба истины. –

ответ

0

Вместо возвращения ложной вы могли бы попытаться просто предотвратить поведение по умолчанию в раскрывающемся меню, как это:

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 нужно вернуть true в конце ddMenu_open. Но я понимаю, откуда вы. Эта книга, кстати, поможет вам быстро: http://eloquentjavascript.net/

+0

Я считаю, что определение функции должно быть: 'function ddMenu_open (e)', если вы используете 'e.preventDefault'. – Rob

+0

Я пробовал выше, и мои ссылки все еще не работают. – user982853

+0

см. Код выше – user982853