【问题标题】:Return False - Link Not working - Drop Down返回 False - 链接不工作 - 下拉
【发布时间】:2015-09-21 16:17:58
【问题描述】:

好的,我有一个 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>

再次,我希望在单击文档时关闭下拉菜单,但单击菜单本身时除外。谢谢。

【问题讨论】:

  • 设置代码的 jsfiddle 会很有帮助。
  • 似乎document.onclick = ddMenu_timer; 每次点击都会启动计时器。
  • var submenu = $(this).find('ul'); if(submenu){} 这应该是if(submenu.length){}。 jQuery 总是返回一个对象(即使它没有元素)。 if([])if($()) 都是真的。
  • 即使我删除 document.onclick = ddMenu_time;链接仍然无效。
  • 你的缩进/大括号风格真的很糟糕。

标签: javascript jquery ajax


【解决方案1】:

您可以尝试阻止下拉菜单的默认行为,而不是返回 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/

【讨论】:

  • 我认为函数定义应该是:function ddMenu_open(e),如果你使用的是e.preventDefault
  • 尝试将 ddMenu_close(e) 放在 ddMenu_open 之外(没有理由将函数放在另一个函数中,实际上我只是注意到您的所有代码都是函数中的函数。)我可以帮忙如果您可以向我提供整个文档的链接。如果我们看到您正在使用的所有库和标记,我们会更清楚您想要实现的目标。 @Rob (e) 指的是 ddMenu_close(e) 而不是 ddMenu_open()
猜你喜欢
  • 2016-06-29
  • 1970-01-01
  • 1970-01-01
  • 2020-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-26
  • 2016-12-01
相关资源
最近更新 更多