返回False - 链接不工作 - 下拉

时间:2011-12-28 21:31:27

标签: javascript jquery ajax

好的,我有一个javascript下拉菜单。下拉菜单工作正常,但当我单击其中一个下拉链接时链接不起作用。我认为这与我的“return false / true”设置有关。

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

因此,当我删除“return false”语句时,我的链接可以工作,但是我的下拉菜单不会保持打开状态。当我删除return 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>

我再次希望在单击文档时关闭菜单,除非单击菜单本身。感谢。

1 个答案:

答案 0 :(得分: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中声明参数,也不需要在ddMenu_open结束时返回true。但我知道你来自哪里。顺便说一下,这本书可以帮助你提高速度:http://eloquentjavascript.net/