【问题标题】:Vertical menu dropdown that stays open on sub menu pages在子菜单页面上保持打开的垂直菜单下拉菜单
【发布时间】:2018-03-23 20:02:30
【问题描述】:

我一直在努力思考如何让我的菜单子项在活动页面上保持打开状态。我已经看到与决议类似的问题,但是当我实施它们时我似乎无法让它们发挥作用,所以我对之前提出的问题表示歉意。我正在使用 Jquery 打开子菜单项,允许随时打开多个菜单项并随时关闭,唯一的问题是单击子菜单项时菜单折叠,我希望它访问该页面时保持打开状态。我在上面附加了一个 JSFiddle,这样你就可以想象我的问题是什么。谢谢,非常感谢所有帮助!

$(document).ready(function(e) {
  $('.has-sub').click(function() {
    $(this).toggleClass('open');
  });
});
body {
  font-family: sans-serif;
}

.left-nav {
  width: 250px;
  /*change to 100% of contain*/
  background-color: gray;
}

.left-nav ul {
  padding: 0px;
}

.left-nav li {
  list-style: none;
}

.left-nav a {
  display: block;
  padding: 10px 0px 10px 20px;
  text-decoration: none;
  color: #fff;
}


/*hiding sub menu items*/

.left-nav ul ul {
  display: none;
}


/*giving jquery a target*/

.left-nav ul li.open ul {
  display: block;
}


/*arrow*/

.left-nav .has-sub:before {
  content: '\203A';
  float: right;
  color: #fff;
  margin-top: 10px;
  margin-right: 40px;
  /*to make it move*/
  transform: rotate(90deg);
  -webkit-transform: rotate(90deg);
  -moz-transform: rotate(90deg);
}

.left-nav li.open:before {
  content: '\2039';
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<nav class="left-nav">
  <ul>
    <li class="has-sub"><a href="#">1st</a>
      <!-- First nest -->
      <ul>
        <li><a href="#">Sub 1</a></li>
        <li><a href="#">Sub 2</a></li>
        <li><a href="#">Sub 3</a></li>
        <li><a href="#">Sub 4</a></li>
      </ul>
    </li>
    <li class="has-sub"><a href="#">2nd</a>
      <!-- First nest -->
      <ul>
        <li><a href="#">Sub 1</a></li>
        <li><a href="#">Sub 2</a></li>
        <li><a href="#">Sub 3</a></li>
        <li><a href="#">Sub 4</a></li>
      </ul>
    </li>
    <li><a href="#">3rd</a></li>
    <li><a href="#">4th</a></li>
    <li><a href="#">5th</a></li>
  </ul>
</nav>

【问题讨论】:

    标签: javascript jquery html css


    【解决方案1】:

    所以你需要做的是在用户使用stopPropagation点击子菜单项时停止事件的传播

    $(document).ready(function(e) {
      $('.has-sub').click(function() {
        $(this).toggleClass('open');
      });
      // Just add this
      $('.has-sub li a').click(function (e) {
        e.stopPropagation();
      });
    });
    body {
      font-family: sans-serif;
    }
    
    .left-nav {
      width: 250px;
      /*change to 100% of contain*/
      background-color: gray;
    }
    
    .left-nav ul {
      padding: 0px;
    }
    
    .left-nav li {
      list-style: none;
    }
    
    .left-nav a {
      display: block;
      padding: 10px 0px 10px 20px;
      text-decoration: none;
      color: #fff;
    }
    
    
    /*hiding sub menu items*/
    
    .left-nav ul ul {
      display: none;
    }
    
    
    /*giving jquery a target*/
    
    .left-nav ul li.open ul {
      display: block;
    }
    
    
    /*arrow*/
    
    .left-nav .has-sub:before {
      content: '\203A';
      float: right;
      color: #fff;
      margin-top: 10px;
      margin-right: 40px;
      /*to make it move*/
      transform: rotate(90deg);
      -webkit-transform: rotate(90deg);
      -moz-transform: rotate(90deg);
    }
    
    .left-nav li.open:before {
      content: '\2039';
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <nav class="left-nav">
      <ul>
        <li class="has-sub"><a href="#">1st</a>
          <!-- First nest -->
          <ul>
            <li><a href="#">Sub 1</a></li>
            <li><a href="#">Sub 2</a></li>
            <li><a href="#">Sub 3</a></li>
            <li><a href="#">Sub 4</a></li>
          </ul>
        </li>
        <li class="has-sub"><a href="#">2nd</a>
          <!-- First nest -->
          <ul>
            <li><a href="#">Sub 1</a></li>
            <li><a href="#">Sub 2</a></li>
            <li><a href="#">Sub 3</a></li>
            <li><a href="#">Sub 4</a></li>
          </ul>
        </li>
        <li><a href="#">3rd</a></li>
        <li><a href="#">4th</a></li>
        <li><a href="#">5th</a></li>
      </ul>
    </nav>

    【讨论】:

    • 感谢您的回复!我已经使用您提供的代码添加了 stopPropagation 但不幸的是它似乎没有起到作用prntscr.com/h3zkon这是之前的,然后在点击之后发生prntscr.com/h3zl4u
    • 链接是否重定向到另一个页面?因为如果是这样,您必须在 html 中添加类,以便在加载新页面时子项保持打开状态。
    • 是的,它指向另一个页面,我需要添加哪个类?我正在慢慢学习:P
    • 没关系。您需要将“open”类添加到子项所属的菜单项中。像这样&lt;li class="has-sub open"&gt;&lt;a href="#"&gt;1st&lt;/a&gt;。你有很多方法可以做到这一点,这取决于你用来构建页面的方式。你能澄清一下你是只使用html还是一些后端框架?
    • 我很可能会将它添加到 WordPress 中 - 我已经在 wordpress 中使用它,打开菜单并关闭它只是没有保持打开状态!我已经测试了代码,谢谢!这行得通!不幸的是,我不确定它是否适用于 WP - 这绝对可以解决问题!谢谢您的帮助! :)
    【解决方案2】:

    使用e.target 和方法is()hasClass() 来检查你点击的元素:

    $(document).ready(function() {
        $('.has-sub').click(function(e) {
            var val = $(e.target).parent();
            if (val.is("li") && val.hasClass("has-sub")) {
                $(val).toggleClass('open');
            }
        })
    })
    body {
      font-family: sans-serif;
    }
    
    .left-nav {
      width: 250px;
      /*change to 100% of contain*/
      background-color: gray;
    }
    
    .left-nav ul {
      padding: 0px;
    }
    
    .left-nav li {
      list-style: none;
    }
    
    .left-nav a {
      display: block;
      padding: 10px 0px 10px 20px;
      text-decoration: none;
      color: #fff;
    }
    
    
    /*hiding sub menu items*/
    
    .left-nav ul ul {
      display: none;
    }
    
    
    /*giving jquery a target*/
    
    .left-nav ul li.open ul {
      display: block;
    }
    
    
    /*arrow*/
    
    .left-nav .has-sub:before {
      content: '\203A';
      float: right;
      color: #fff;
      margin-top: 10px;
      margin-right: 40px;
      /*to make it move*/
      transform: rotate(90deg);
      -webkit-transform: rotate(90deg);
      -moz-transform: rotate(90deg);
    }
    
    .left-nav li.open:before {
      content: '\2039';
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <nav class="left-nav">
      <ul>
        <li class="has-sub">
          <a href="#">1st</a>
          <!-- First nest -->
          <ul>
            <li><a href="#">Sub 1</a></li>
            <li><a href="#">Sub 2</a></li>
            <li><a href="#">Sub 3</a></li>
            <li><a href="#">Sub 4</a></li>
          </ul>
        </li>
        <li class="has-sub"><a href="#">2nd</a>
          <!-- First nest -->
          <ul>
            <li><a href="#">Sub 1</a></li>
            <li><a href="#">Sub 2</a></li>
            <li><a href="#">Sub 3</a></li>
            <li><a href="#">Sub 4</a></li>
          </ul>
        </li>
        <li><a href="#">3rd</a></li>
        <li><a href="#">4th</a></li>
        <li><a href="#">5th</a></li>
      </ul>
    </nav>

    【讨论】:

    • 很抱歉打扰了,我对此还很陌生,但仍在努力解决问题。我试过使用你给我的代码,但不幸的是它似乎没有奏效,之前:prnt.sc/h3zkon,然后点击之后:prnt.sc/h3zl4u - 很抱歉很痛苦
    • 刚试了一下,结果还是一样,谢谢你的时间和帮助! :)
    猜你喜欢
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多