单击子页面时如何使菜单保持折叠状态?

时间:2015-08-01 06:33:24

标签: jquery menu

我有手风琴菜单,其中包含用于折叠和点击href链接的字段,当我点击父链接并将我带到另一个页面时,它会保持打开状态,但是当我点击菜单中的任何子页面时它会关闭。当我点击任何子页面时,如何保持菜单也打开。 它只在我点击"产品"并保持开放。但是当我点击产品1链接或子产品链接时它会保持关闭状态。当我点击这些子菜单时,我希望它保持打开状态。



(function($) {
  $(document).ready(function() {
    $('#cssmenu li.has-sub').prepend('<span class="holder"></span>');
    $('#cssmenu li.has-sub > .holder').on('click', this, function() {
      var element = $(this).parent('li');
      if (element.hasClass('open')) {
        element.removeClass('open');
        element.find('li').removeClass('open');
        element.find('ul').slideUp();
      } else {
        element.addClass('open');
        element.children('ul').slideDown();
        element.siblings('li').children('ul').slideUp();
        element.siblings('li').removeClass('open');
        element.siblings('li').find('li').removeClass('open');
        element.siblings('li').find('ul').slideUp();
      }
    });

    // Opens "active" Menu Item(s)
    $('#cssmenu li.active').addClass('open').children('ul').slideDown();
  });
})(jQuery);
&#13;
#cssmenu,
#cssmenu ul,
#cssmenu ul li,
#cssmenu ul li a {
  margin: 0;
  padding: 0;
  border: 0;
  list-style: none;
  line-height: 1;
  display: block;
  position: relative;
}
#cssmenu {
  width: 200px;
  font-family: Helvetica, Arial, sans-serif;
  color: #ffffff;
}
#cssmenu ul ul {
  display: none;
}
.align-right {
  float: right;
}
#cssmenu > ul > li > a {
  padding: 15px 20px;
  border-top: 1px solid #1682ba;
  cursor: pointer;
  font-size: 14px;
  font-weight: bold;
  text-decoration: none;
  color: #ffffff;
  background: #36aae7;
}
.has-sub > a:after {
  content: "";
  width: 0;
  height: 0;
  float: right;
  border-right: 10px solid transparent;
  border-left: 10px solid transparent;
  margin: 10px 10px 0 0;
  border-top: 6px solid #5F5F5F;
}
.holder {
  border: 1px solid transparent;
  padding: 11px 26px;
  z-index: 3;
  position: absolute;
  margin: 11px 12px 0 0;
  right: 0;
  background: rgba(255, 65, 65, 0.24);
}
#cssmenu > ul > li.open > a {
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.15);
  border-bottom: 1px solid #1682ba;
}
#cssmenu > ul > li:last-child > a,
#cssmenu > ul > li.last > a {
  border-bottom: 1px solid #1682ba;
}
#cssmenu ul ul li a {
  cursor: pointer;
  border-bottom: 1px solid #32373e;
  border-left: 1px solid #32373e;
  border-right: 1px solid #32373e;
  padding: 10px 20px;
  z-index: 1;
  text-decoration: none;
  font-size: 13px;
  color: #eeeeee;
  background: #49505a;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
#cssmenu ul ul li:first-child > a {
  box-shadow: none;
}
#cssmenu ul ul ul li:first-child > a {
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
#cssmenu ul ul ul li a {
  padding-left: 30px;
}
#cssmenu ul ul li.has-sub > a::after {
  content: "";
  width: 0;
  height: 0;
  float: right;
  border-right: 10px solid transparent;
  border-left: 10px solid transparent;
  margin: 10px 10px 0 0;
  border-top: 6px solid #5F5F5F;
}
&#13;
<type="text/javascript">
  </script>
  <script src="http://code.jquery.com/jquery-2.1.4.min.js" type="text/javascript"></script>
  <div id='cssmenu'>
    <ul>
      <li><a href='#'><span>Home</span></a>
      </li>
      <li class='active has-sub'><a href='www.DontHideMePlease.com'><span>Products</span></a>

        <ul>
          <li class='has-sub'><a href='#'><span>Product 1</span></a>

            <ul>
              <li><a href='#'><span>Sub Product</span></a>
              </li>
              <li class='last'><a href='#'><span>Sub Product</span></a>
              </li>
            </ul>
          </li>
          <li class='has-sub'><a href='#'><span>Product 2</span></a>

            <ul>
              <li><a href='#'><span>Sub Product</span></a>
              </li>
              <li class='last'><a href='#'><span>Sub Product</span></a>
              </li>
            </ul>
          </li>
        </ul>
      </li>
      <li><a href='#'><span>About</span></a>
      </li>
      <li class='last'><a href='#'><span>Contact</span></a>
      </li>
    </ul>
  </div>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

你接近的逻辑问题是,

  • 当您单击父菜单时,即使重定向到新页面后菜单也会打开,因为js脚本默认情况下会始终打开父菜单。
  • 显然这就是为什么像子菜单导航这样的其他导航没有更新菜单的原因:)
  • 另外,为什么要在每个页面上加载公共资源(如菜单),而是只有一个带菜单的页面,只需使用ajax调用基于用户选择更改内容。这样页面呈现时间和可用性将会有待改进。

以下是我上面提到的方法原型。

HTML代码:

<div id="container"> <!-- common resource which need not be loaded eveytime-->
    <div class="links" data-ref="http://fiddle.jshell.net/webdevem/JfcJp/show/">Page1</div>
    <div class="links" data-ref="http://fiddle.jshell.net/simurai/cgmce/show">Page2</div>
    <div class="links" data-ref="http://fiddle.jshell.net/greypants/msuYF/show">Page3</div>
</div>

<div id="result-section"></div> <!-- dynamic section,new content loaded based on user selection-->

JS代码:

 $('#result-section').load(address, function () {
         //.load is a jQuery ajax method to load external page data.
 });

现场演示@JSfiddle:http://fiddle.jshell.net/dreamweiver/dpwmcu0b/8/

注意:这只是一个通用解决方案,可以作为构建实际解决方案的基础。