javascript - 使用无序列表的 jQuery 下拉导航

标签 javascript jquery jquery-events

我正在尝试使用 jQuery 制作导航下拉菜单,如下所示:

<ul id="home" >
    <li class="navtab"><a href="#">TABANME</a></li>
    <li class="homesub"><a href="#">Some link</a></li>
    <li class="homesub"><a href="#">Some link</a></li>
    <li class="homesub"><a href="#">Some link</a></li>
</ul>

<li> .navtab始终可见 - 子菜单项开始时是隐藏的。我附上了 .hover()<ul>元素( #home ),但是当光标进入子菜单时 <li>元素,mouseout对于 #home触发,子菜单项隐藏。

我知道这与事件冒泡和 mouseover 有关/mouseout , 但我无法弄清楚当光标位于整个 <ul> 上时如何保持菜单打开的逻辑.我目前拥有的 jQuery 是:

$('#thome').hover(
    function(){
       tabShowSubnav($(this).attr('id'))
    },
    function(){
       tabHideSubnav($(this).attr('id'))
    });

function tabShowSubnav(menu){

var tb = '#' + menu;
var sb = '.' + menu.slice(1) + 'sub';

$(tb).css('height','239px');
$(sb).show();
}

有什么建议吗?

最佳答案

帮自己一个大忙,将菜单标记的结构更改为:

<ul id="home" >
  <li class="navtab">
    <a href="#">TABANME</a>
    <ul class="submenu">
      <li><a href="#">Some link</a></li>
      <li><a href="#">Some link</a></li>
      <li><a href="#">Some link</a></li>
    </ul>
  </li>
</ul>

并将悬停事件放在 li.navtab 上,使子菜单可见。您会发现这非常更容易做到。例如,CSS:

ul.submenu { display: none; }

与:

$(function() {
  $("li.navtab").hover(function() {
    $(this).children("ul.submenu").show();
  }, function() {
    $(this).children("ul.submenu").hide();
  });
});

并且您已经完成了大部分工作。

综上所述,我强烈建议使用现有的 jQuery 菜单插件。有很多关于这些。我对 superfish 的体验相对较好.重新发明这个特殊的轮子毫无意义。

关于javascript - 使用无序列表的 jQuery 下拉导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1526309/

相关文章:

javascript - 当 Firefox 自动滚动时捕获鼠标滚轮事件

jquery - 选择的插件更改事件未触发

javascript - 检查唯一输入名称中是否存在输入值

javascript - contenteditable 中的占位符 - 焦点事件问题

javascript - 动画完整选项不起作用?

jquery - DotNetNuke Jquery 在模块中不起作用

javascript - Jquery ajax() 错误 : "Uncaught Syntax error, unrecognized expression: %2Cacpitool%2Caide"

javascript - 如何调整 JSFiddle 中的代码以在浏览器中工作?

jquery - 使用 JQUery 删除具有相同类的嵌套元素保留最里面的元素