如何在 jQuery 悬停菜单中保持子菜单打开?

2023-12-06

我上周刚刚开始使用 jQuery 进行编码,需要一些帮助来弄清楚如何使菜单正常工作。我有 3 个选项卡,每个选项卡都有自己的菜单。当显示页面时,会自动显示菜单和子菜单。显示后,用户可以将鼠标悬停在选项卡上以查看其他子菜单,当他们停止悬停时,将显示原始子菜单。

我的问题是,尽管我可以向他们显示其他选项卡的子菜单,但我无法保持子菜单打开以供用户单击子菜单项。其他教程展示了仅当子菜单嵌套在父元素中时如何执行此操作,但我的菜单结构代码没有嵌套子菜单(这就是我加入项目时的代码方式)。如果用户将鼠标悬停在相应的选项卡上,是否有某种方法可以保持子菜单打开?

这是我的菜单 HTML:

    <div id="navigation">
        <div id="main-nav">
            <div id="kids"><a href="../images/nav1.png"></a></div>
            <div id="community"><a href="../images/nav2.png"></a></div>
            <div id="about"><a href="../images/nav3.png"></a></div>
        </div>
    </div>

    <div id="sub-nav"> 
        <ul class="menu-1 requiresJS">
            <li><a href="#">Item1</a></li>
            <li><a href="#">Item2</a></li>
            <li><a href="#">Item3</a></li>
            <li><a href="#">Item4</a></li>
            <li><a href="#">Item5</a></li>
            <li><a href="#">Item6</a></li>
        </ul>
        <ul class="menu-2 requiresJS">
            <li><a href="#">Item1</a></li>
            <li><a href="#">Item2</a></li>
            <li><a href="#">Item3</a></li>
            <li><a href="#">Item4</a></li>
            <li><a href="#">Item5</a></li>
            <li><a href="#">Item6</a></li>
        </ul>
        <ul class="menu-3 requiresJS">
            <li><a href="#">Item1</a></li>
            <li><a href="#">Item2</a></li>
            <li><a href="#">Item3</a></li>
            <li><a href="#">Item4</a></li>
            <li><a href="#">Item5</a></li>
            <li><a href="#">Item6</a></li>
        </ul>

到目前为止,这是我的 jQuery:

// For JS users, display sub menus by default
$(".requiresJS").css("display","block");

var startMenu

//hide all sub menus
$("#sub-nav ul").hide();

// check URL for about, community or kids and set startMenu with correct term
if(window.location.href.indexOf("about") != -1){startMenu = "about"}
else if(window.location.href.indexOf("community") != -1){startMenu = "community"}
else{startMenu = "kids"}

// highlight correct category tab
$("div#main-nav #" + startMenu).addClass("selected");

// show correct starting menu
$("#sub-nav ul.menu-" + startMenu).show('slide', {direction: 'right'}, 600).effect("bounce", { times:1,direction:"right",distance:13 }, 300);

// show correct menu on mouseover of div
$("div#main-nav div").mouseover(function() {

    $("#sub-nav ul").stop(true, true)
    $("#sub-nav ul").hide();

    var currentId = $(this).attr('id');

    $("#sub-nav ul.menu-" + currentId).show();      
});

$("div#main-nav div").mouseover(function() {
        $("#sub-nav ul").stop(true, true)
        $("#sub-nav ul").hide();
        var currentId = $(this).attr('id');
        $("#sub-nav ul.menu-" + currentId).show();      
});

我有一个类似的情况,并通过将 mouseover 事件拆分为单独的 mouseenter 和 mouseleave 事件来解决它。只是伪代码/大纲,但根据您的情况尝试如下:

$("div#main-nav div").mouseenter(function() {
   // Check if sub menu is open, return if it is allready open
   // (I add a 'menu_open' class to sub menu when it is opened)

   // Code to hide open submenues
   // Code to open selected submenu      
});

然后使用 mouseleave 及其事件的 toElement 属性来检查鼠标指针去了哪里,如果它去了子菜单,则不执行任何操作,如果不关闭所有子菜单。请注意,您还需要在子菜单上连接 mouseleave 事件。像这样的东西:

$("#main-nav div").mouseleave(function (event) {
   var toElem = $(event.toElement);
   if (toElem.closest("div.sub-nav").id=="subnav") return; // Prob nicer way to do this...point is to check if mouse enters a submenu, and if so stay open.
   // Close all open submenues, e.g. 
   $("#sub-nav ul").hide();
 });

 $("#subnav ul").mouseleave(function (event) {
    var toElem = $(event.toElement);
    if (toElem.closest("div.sub-nav").id=="subnav") return; // Check if entering submenu
    if (toElem.closest("div#main-nav")) return; // Check if entering main menu
    // Close all open submenues, e.g.
    $("#sub-nav ul").hide();
 });

希望这对您有一些帮助。我自己刚刚解决了这个问题,所以没有时间完善它,我确信有更好、更漂亮的方法来做到这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 jQuery 悬停菜单中保持子菜单打开? 的相关文章

随机推荐

  • 如何在 TableViewController 上方添加 UIView

    我想在我的表格视图上方显示一个 UIView 出于测试目的 我使用了搜索栏 以消除代码中任何可能的问题 我的设置 标签栏控制器我的自定义表视图控制器看法TableView 用于自定义单元格高度 搜索栏 我将搜索栏放置在 窗口 的顶部 并下拉
  • 多态性和数据隐藏:基类是否会覆盖或忽略派生类的访问限制?

    请看下面的代码清单 include
  • jsTree - 使用 AJAX/C#Web 方法动态填充树

    我有一个 div 我想用 jsTree 填充它 我得到了树应该显示的 正在加载 图标 但是 即使没有抛出错误 似乎也会出现 JavaScript 错误 我从 AJAX 请求加载文件夹结构 如下所示 Documents aspx GetFol
  • React Native 和全局可访问的对象

    我在 React Native 上度过了一段非常糟糕的时光 并且能够从更深层次的函数中访问函数 变量和对象 老实说我以为Redux这将是我的可取之处 但我也遇到了完全相同的障碍 一个例子 export class Home extends
  • 如何在专注于电视 LazyRow 的同时始终专注于第一项?

    我正在尝试实现一个 TVLazyRow 当我们关注该行上方其他可组合项的行时 它必须始终首先关注第一个项目 目前 按下时 焦点将转到行中位于上面可组合项正下方的项目 我怎样才能实现这种行为 这是我的代码以获取更多上下文 val tvList
  • UWP - 旋转图像,同时保持其与网格对齐,仅使用 XAML

    Using Windows 模板工作室 我创建了一个 主要是自动生成的 示例 UWP 应用程序 它在 GridView 中显示一堆图像 为了旋转它们 我使用了以下 xaml 注意RenderTransform我添加的块以及该范围内的注释
  • 如何使用 urllib2 从 Python 中打开的 url 中提取特定数据?

    我是 Python 新手 正在尝试制作一个非常基本的网络爬虫 例如 我制作了一个简单的函数来加载显示在线游戏高分的页面 所以我能够获取 html 页面的源代码 但我需要从该页面中提取特定的数字 例如 网页如下所示 http hiscore
  • while (cin >> x) 和文件结束问题

    我对发生的事情有点困惑 我正在玩 Accelerated C 中的一些程序 并且在其中一个早期程序中遇到了问题 第 35 页 如果您附近碰巧有一个副本 它使用这个片段 while cin gt gt x count sum x count
  • 上传时 EPIPE(管道破裂)?

    我的代码有问题 但我不知道 E 日志报告在哪里 04 08 05 47 46 745 E Upload Server 20080 Starting storage sdcard1 Music Piano my favourites 11 T
  • 具有索引访问的哈希集

    我需要一个数据结构 允许我向其中添加 项目 不允许重复 通过索引访问集合 我正在考虑哈希集 但是HashSet没有索引 满足上述需求的数据结构是什么 源自的集合怎么样KeyedCollection 这表示项目的集合 其中每个键都源自项目本身
  • Flutter文本省略号删除最后一个单词

    我想使用 TextOverflow ellipsis 但它最后删除 for 使其成为省略号 并且看起来非常难看 我怎样才能做到不删除任何单词 例如 当我使用 fade 和 softwrap false 进行制作时 它可以按我想要的方式工作
  • 如何使用cloudbuild.yaml在GCP上配置redis?

    我正在尝试在 GCP 上设置 CI CD 管道 我有一个使用 Redis 作为数据库的 NodeJS 应用程序 我正在尝试在 GCP 上配置 redis 我已经尝试了下面的配置 但是一旦执行了redis步骤 它就会一直等待redis连接并且
  • R中基于行名合并数据框

    如何合并两个数据框的列 其中包含一组不同的列 但some具有相同名称的行 两个数据框中都没有出现的行的字段应该用零填充 gt d a b c d e f g h i j 1 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9
  • Android - 构造函数 ActionBarDrawerToggle 未定义

    我在 oncreate 函数中使用此代码通过按应用程序图标打开导航抽屉 ActionBarDrawerToggle mDrawerToggle new ActionBarDrawerToggle this host Activity Dra
  • Spring Data Neo4j -repository.save 和 @Indexed(unique=true)

    今天我尝试了Spring Data Neo4j 终于可以使用了somehow 我在用着 春季4 0 2 Spring数据Neo4j 3 0 0 查询DSL 3 3 1 Neo4j 2 0 1 这是我的配置 Configuration Ena
  • Joomla 和 MySQL

    Joomla 上是否有关于在 PHP 中通过 MySQL 进行数据库查询的具体文档 我真正在寻找什么 Joomla 是否实现了自己的数据库包装器 如果没有 建议使用指定的配置参数创建一个 Joomla 是否能够参数化其查询以防止 SQL 注
  • 部分唤醒锁不起作用

    我的应用程序有activities和背景service必须运行24 7 我的应用程序必须通过以下方式与服务器通信Wi Fi发送和接收信息 Problem 每当服务器发送任何警报时 我的应用程序都应该接收并弹出该应用程序 无论它是在前台还是后
  • 在 ~/.bashrc 中设置的变量并在 shell 脚本中访问它们

    我在 bashrc 的最顶部有这个 before非交互式 shell 的返回 FOO BAR export FOO echo HELLO WORLD If not running interactively don t do anythin
  • List 上的 BinarySearch 似乎返回奇怪的结果

    我对 C 很陌生 我创建了一个 List 对象 然后对特定项目执行 BinarySearch 但搜索结果似乎很奇怪 这是代码 class Element public int x public Element int val x val c
  • 如何在 jQuery 悬停菜单中保持子菜单打开?

    我上周刚刚开始使用 jQuery 进行编码 需要一些帮助来弄清楚如何使菜单正常工作 我有 3 个选项卡 每个选项卡都有自己的菜单 当显示页面时 会自动显示菜单和子菜单 显示后 用户可以将鼠标悬停在选项卡上以查看其他子菜单 当他们停止悬停时