嵌套崩溃

时间:2018-08-27 16:37:20

标签: javascript jquery

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

我想用我的JavaScript代码说的是:“嘿,当用户单击li的父级ul.submenu时,得到其ul.submenu子级并<仅> 附加slideToggle”。但是,正如您从摘要中看到的那样,它也关闭了父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>

1 个答案:

答案 0 :(得分:2)

您要阻止click事件启动DOM并触发父级上的click处理程序。为此使用.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>