javascript - 嵌套折叠

标签 javascript jquery

我正在尝试使用 jQuery 折叠嵌套菜单。我读过this answer而且,对我来说,它似乎与我的解决方案相似。问题是我的不起作用。

我认为我用 JavaScript 代码表达的是:“嘿,当用户单击作为 ul.submenu 父级的 li 时,获取其ul.submenu子项并将slideToggleonly附加到它”。但是,正如您从代码片段中看到的,它还关闭了父级 ul.submenu,我不明白为什么。

$(document).ready(function () {

    $('.submenu').hide();

    $('.submenu').parent('li').click(function () {
        $(this).children('ul.submenu').slideToggle("slow");
    });
    
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<nav>
    <ul class="menu">
        <li>Home</li>
        <li>Blog
            <ul class="submenu">
                <li>
                    Author
                    <ul class="submenu">
                        <li>New</li>
                        <li>Handle</li>
                    </ul>
                </li>
                <li>
                    <span>Category</span>
                    <ul class="submenu">
                        <li>New</li>
                        <li>Handle</li>
                    </ul>
                </li>
                <li>
                    <span>Tag</span>
                    <ul class="submenu">
                        <li>New</li>
                        <li>Handle</li>
                    </ul>
                </li>
                <li>
                    <span>Post</span>
                    <ul class="submenu">
                        <li>New</li>
                        <li>Handle</li>
                    </ul>
                </li>
            </ul>
        </li>
        <li>Photo</li>
        <li>Settings</li>
    </ul>
</nav>

最佳答案

您想要阻止单击事件在 DOM 中冒泡并触发父级上的单击处理程序。使用.stopPropagation()为此:

$(document).ready(function() {
  $('.submenu').hide();
  $('.submenu').parent('li').click(function(e) {
    e.stopPropagation()
    $(this).children('ul.submenu').slideToggle("slow");
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<nav>
  <ul class="menu">
    <li>Home</li>
    <li>Blog
      <ul class="submenu">
        <li>
          Author
          <ul class="submenu">
            <li>New</li>
            <li>Handle</li>
          </ul>
        </li>
        <li>
          <span>Category</span>
          <ul class="submenu">
            <li>New</li>
            <li>Handle</li>
          </ul>
        </li>
        <li>
          <span>Tag</span>
          <ul class="submenu">
            <li>New</li>
            <li>Handle</li>
          </ul>
        </li>
        <li>
          <span>Post</span>
          <ul class="submenu">
            <li>New</li>
            <li>Handle</li>
          </ul>
        </li>
      </ul>
    </li>
    <li>Photo</li>
    <li>Settings</li>
  </ul>
</nav>

关于javascript - 嵌套折叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52043591/

相关文章:

javascript - PNG 图像不显示

javascript - V8 和 ECMAScript 的区别

构造函数的 Javascript Date() 参数

javascript - 仅使用 jQuery 将 return false 添加到父链接

javascript - 如何使用 JavaScript 代码查找 WeekOff

javascript - 在栏外或按钮外单击时隐藏菜单边栏

javascript - 使用 for 循环加载 Jssor Slider

javascript - 将矩阵输出文本更改为西里尔文 unicode 脚本

javascript - 使用 Bootstrap 时间选择器时,data-ng-model 值不会更新

JavaScript 选择过滤器