javascript - 单击时保持 jquery 菜单打开

标签 javascript jquery html css

这似乎是一个常见问题,但我无法根据我的情况调整之前给出的答案。我有一个 jquery 垂直 Accordion 菜单,我想用它来导航两个站点:home.html 和research.html。我的 home.html 上的相关部分如下所示:

<div id="cssmenu">
<ul>
    <li class='active'><a href='index.html'>Home</a></li>
    <li><a href='research.html'>Research</a>
        <ul>
            <li><a href='research.html#r1'><span>interests</span></a></li>                      
            <li><a href='research.html#r2'><span>preprints</span></a></li>
            <li><a href='research.html#r3'><span>publications</span></a></li>
            <li><a href='research.html#r4'><span>coauthors</span></a></li>
        </ul>
    </li>
</ul>

这是我的 Research.html 的相关部分的样子:

<div id="cssmenu">
<ul>
    <li><a href='index.html'>Home</a></li>
    <li class='active'><a href='research.html'>Research</a>
        <ul>
            <li><a href='research.html#r1'><span>interests</span></a></li>                      
            <li><a href='research.html#r2'><span>preprints</span></a></li>
            <li><a href='research.html#r3'><span>publications</span></a></li>
            <li><a href='research.html#r4'><span>coauthors</span></a></li>
        </ul>
    </li>
</ul>

这是“我的”jquery 代码

$(document).ready(function(){
$('#cssmenu > ul > li ul').each(function(index, e){
    var count = $(e).find('li').length;
    var content = '<span class="cnt">' + '</span>';
    $(e).closest('li').children('a').append(content);
    });
$('#cssmenu > ul > li > a').click(function() {
    $('#cssmenu li').removeClass('active');
    $(this).closest('li').addClass('active');
    var checkElement = $(this).next();
    if((checkElement.is('ul')) && (!checkElement.is(':visible'))) {
        $('#cssmenu ul ul:visible').slideUp('normal');
        checkElement.slideDown('normal');
    }
    if($(this).closest('li').find('ul').children().length == 0) {
        return true;
    } else {
        return false;
    }
    });

如果我单击“研究”,子菜单会正常打开,如果我单击子菜单条目,则会加载页面上的相应位置。然而,之前打开的子菜单现在又被关闭了。我怎样才能避免这种行为?

非常感谢任何帮助,但请记住我不是网络程序员。

最佳答案

请尝试以下代码 我还更新了 fiddle

Demo Link

$(document).ready(function() {
  $('#cssmenu > ul > li ul').each(function(index, e) {
    var count = $(e).find('li').length;
    var content = '<span class="cnt">' + '</span>';
    $(e).closest('li').children('a').append(content);
  });
  $('#cssmenu > ul > li > a').click(function() {
    $('#cssmenu li').removeClass('active');
    $(this).closest('li').addClass('active');
    var checkElement = $(this).next();
    if ((checkElement.is('ul')) && (!checkElement.is(':visible'))) {
      $('#cssmenu ul ul:visible').slideUp('normal');
      checkElement.slideDown('normal');
    }
    if ($(this).closest('li').find('ul').children().length == 0) {
      return true;
    } else {
      return false;
    }
  });


  var hashTag = window.location.hash;
  if (hashTag != '') {
    $(hashTag).addClass('active');
  }

});
#cssmenu,
#cssmenu ul,
#cssmenu li,
#cssmenu a {
  list-style: none;
  text-decoration: none;
}
#cssmenu {
  width: 325px;
  float: right;
  margin-top: 60px;
}
#cssmenu > ul {
  position: fixed;
}
#cssmenu > ul > li > a {
  font-size: 24px;
  font-weight: bold;
  font-family: Gill Sans;
  padding-bottom: 300px;
  color: #005D9A;
}
#cssmenu > ul > li > a > span {
  background: #FFFFFF;
}
#cssmenu > ul > li > a:hover {
  text-decoration: none;
}
#cssmenu > ul > li.active {} #cssmenu > ul > li.active > a {
  color: #C80000;
}
#cssmenu > ul > li.active > a span {
  background: #FFFFFF;
}
#cssmenu span.cnt {
  padding: 0px;
  margin: 0px;
  background: none;
}
/* Sub menu */

#cssmenu ul ul {
  display: none;
  padding-bottom: 15px;
  padding-left: 0px;
}
#cssmenu ul ul li {} #cssmenu ul ul a {
  font-family: Avenir;
  font-size: 18px;
}
#cssmenu ul ul a:hover {
  color: #585858;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="cssmenu">
  <ul>
    <li class='active'><a href='index.html'>Home</a>

    </li>
    <li id="research"><a href='research.html'>Research</a>

      <ul>
        <li><a href='research.html#rarticles'><span>interests</span></a>

        </li>
        <li><a href='research.html#rarticles'><span>preprints</span></a>

        </li>
        <li><a href='research.html#rarticles'><span>publications</span></a>

        </li>
        <li><a href='research.html#rarticles'><span>coauthors</span></a>

        </li>
      </ul>
    </li>
  </ul>
</div>

关于javascript - 单击时保持 jquery 菜单打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32992035/

相关文章:

javascript - 带有图像的本地存储

php - 在选择下拉值时执行一个 php 文件

javascript - amCharts map 在页面刷新时未加载圆圈

javascript - 我如何告诉谷歌翻译不要翻译网站的某个部分?

javascript - 如何为 ExtJS 4 应用程序创建预加载器

javascript - 单击 bootstrap 折叠时页面丢失当前位置

javascript - 修正自定义轮播的滑动动画

php - Jquery Submit() 基于php脚本返回值的html表单

c# - JQuery 自动完成不会加载远程值

html - 具有相关内容的 Div 大小