Bootstrap下拉菜单未关闭点击
问题描述:
我们有一个使用OctoberCMS构建的单页响应式网站,一切似乎都正常,减去一个小问题。导航栏有一个下拉菜单,当您点击或点击其中的某个项目时,该菜单不会自动关闭。在桌面上,您必须单击页面上的任意位置才能关闭,并且在移动设备上,您需要再次单击菜单按钮。只是寻找正确的方式来设置。下面是当前的代码块,请注意,我们使用在网站上引导3.3.1:Bootstrap下拉菜单未关闭点击
<nav id="main-menu" class="navbar navbar-default navbar-fixed-top" role="banner">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#home"><img src="{{ 'assets/images/logo.png'|theme }}" alt="logo"></a>
</div>
<div class="collapse navbar-collapse navbar-right">
<ul class="nav navbar-nav">
<li class="scroll active"><a href="#home">Home</a></li>
<li class="scroll dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#" aria-haspopup="true" aria-expanded="false" role="button">Main Menu 2<span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li><a class="dropdown-item" href="#1">Section 1</a></li>
<li><a class="dropdown-item" href="#2">Section 2</a></li>
<li><a class="dropdown-item" href="#3">Section 3</a></li>
</ul>
</li>
<li class="scroll"><a href="#main3">Main Menu 3</a></li>
<li class="scroll"><a href="#main4">Main Menu 4</a></li>
</ul>
</div>
</div>
<!--/.container-->
</nav>
<!--/nav-->
看在开发者控制台我看到下面的错误时:
Uncaught TypeError: Cannot read property 'top' of undefined
at HTMLAnchorElement.<anonymous> (main.js:21)
at Function.each (jquery.js:4)
at init.each (jquery.js:4)
at Scroll (main.js:20)
at main.js:5
at dispatch (jquery.js:5)
at v.handle (jquery.js:5)
这里是从main.js文件滚动码:
function Scroll() {
\t \t var contentTop = [];
\t \t var contentBottom = [];
\t \t var winTop = $(window).scrollTop();
\t \t var rangeTop = 200;
\t \t var rangeBottom = 500;
\t \t $('.navbar-collapse').find('.scroll a').each(function(){
\t \t \t contentTop.push($($(this).attr('href')).offset().top);
\t \t \t contentBottom.push($($(this).attr('href')).offset().top + $($(this).attr('href')).height());
\t \t })
\t \t $.each(contentTop, function(i){
\t \t \t if (winTop > contentTop[i] - rangeTop){
\t \t \t \t $('.navbar-collapse li.scroll')
\t \t \t \t .removeClass('active')
\t \t \t \t .eq(i).addClass('active'); \t \t \t
\t \t \t }
\t \t })
\t };
\t $('#tohash').on('click', function(){
\t \t $('html, body').animate({scrollTop: $(this.hash).offset().top - 5}, 1000);
\t \t return false;
\t });
预先感谢任何帮助,您可以提供。
答
您的代码正常工作。语法错误在href="#"
中出现。试试这个代码
<nav id="main-menu" class="navbar navbar-default navbar-fixed-top" role="banner">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#home"><img src="{{ 'assets/images/logo.png'|theme }}" alt="logo"></a>
</div>
<div class="collapse navbar-collapse navbar-right">
<ul class="nav navbar-nav">
<li class="scroll active"><a href="#home">Home</a></li>
<li class="scroll dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" role="button">Main Menu 2<span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li><a class="dropdown-item" href="#1">Section 1</a></li>
<li><a class="dropdown-item" href="#2">Section 2</a></li>
<li><a class="dropdown-item" href="#3">Section 3</a></li>
</ul>
</li>
<li class="scroll"><a href="#main3">Main Menu 3</a></li>
<li class="scroll"><a href="#main4">Main Menu 4</a></li>
</ul>
</div>
</div>
<!--/.container-->
</nav>
<!--/nav-->
+0
谢谢。我做了一些更多的测试,并在开发人员控制台中看到错误。我从上面的js文件中添加了错误和滚动代码。 –
我知道这是你使用的bootstrap版本的一个小版本,但是我可以点击下拉菜单并下拉菜单来关闭菜单。这是一个实现代码的[代码项目](https://www.codeply.com/go/cviX07Fv3T),您可以查看一下。 – cwanjt
你包括jQuery吗?作为引导CSS取决于jQuery的某些事件 – Se0ng11
是的,我包括jQuery。我今天玩了一段时间,看起来像是我们使用的10月CMS主题中的js有点时髦。去发布错误和看起来导致上述问题的代码。 –