1

所以我整天都在做这个,但不是一个好的 JS 编码器,它把我带到了这里。

当我单击下拉菜单中指向“test.html”的链接时,什么也没有发生。即使浏览器清楚地显示它是悬停时处于活动状态的“test.html”链接,它也不会重定向。

这是JS代码。

var timeout    = 500;
var closetimer = 0;
var ddmenuitem = 0;

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

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

function headermenu_timer()
{  closetimer = window.setTimeout(headermenu_close, timeout);}

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

$(document).ready(function()
{  $('#headermenu li').bind('click', headermenu_open);
   $('#headermenu > li').bind('mouseout',  headermenu_timer);
   $('#headermenu > li').bind('mouseover', headermenu_canceltimer);
});


document.onclick = headermenu_close;

这是菜单的一部分。

<ul id="headermenu">
    <li><a href="#">Høyttalere</a>
        <ul>
            <li><a href="pages/test.html">Test</a></li>
        </ul>
    </li>

如果有人可以添加正确的代码段或可以在代码中看到错误,我将非常高兴!

4

1 回答 1

2

就是因为这行代码

if(submenu){
   ddmenuitem = submenu.css('visibility', 'visible');
   return false;
}

它进入这个块并返回 false

这相当于调用e.preventDefault()e.stopPropagation()因此链接不跟随。

if(subMenu)// 返回真值 y值。因为它是一个空的jQuery 对象

更好的检查是检查长度

if(subMenu.length)

代码

function headermenu_open(event){

   event.stopPropagation(); // need to stop the Propagation first
   headermenu_canceltimer();
   headermenu_close();
   var submenu = $(this).find('ul');
    if(submenu.length){
        ddmenuitem = submenu.css('visibility', 'visible');
        return false;
    }
    return true;
}

工作小提琴

于 2013-06-20T23:06:08.570 回答