自动closures响应式导航栏
我正在使用Bootstrap响应式导航栏。 当导航栏被折叠,我打开菜单并点击一个菜单项时,菜单不会自动closures,我必须自己手动完成。
点击其中一个button后是否可以自动closures菜单?
编辑:正如Maximus指出的那样, 3.x bootstrap解决scheme是:
$('.navbar-collapse a').click(function(){ $(".navbar-collapse").collapse('hide'); });
https://jsfiddle.net/yohuLuj2/
2.x bootstrap的旧答案:
您应该可以通过将单击处理程序添加到列表项目然后closures导航。
$('.nav-collapse').click('li', function() { $('.nav-collapse').collapse('hide'); });
下面是一个jsfiddle: http : //jsfiddle.net/hajpoj/By6ym/4/
自举的工作解决scheme3
$('.navbar-collapse a').click(function(){ $(".navbar-collapse").collapse('hide'); });
我只是在每个链接上复制btn-navbar(data-toggle =“collapse”data-target =“。nav-collapse”)的2个属性,如下所示:
<div class="nav-collapse"> <ul class="nav" > <li class="active"><a href="#home" data-toggle="collapse" data-target=".nav-collapse">Home</a></li> <li><a href="#about" data-toggle="collapse" data-target=".nav-collapse">About</a></li> <li><a href="#portfolio" data-toggle="collapse" data-target=".nav-collapse">Portfolio</a></li> <li><a href="#services" data-toggle="collapse" data-target=".nav-collapse">Services</a></li> <li><a href="#contact" data-toggle="collapse" data-target=".nav-collapse">Contact</a></li> </ul> </div>
只有我join杰森的解决scheme是下拉的例外。 如果有人只是点击切换子菜单,您不想closures菜单。 所以…
$('.navbar-collapse a:not(.dropdown-toggle)').click(function(){ $(".navbar-collapse").collapse('hide'); });
@迈克的下拉解决scheme为我工作,除了在下拉菜单中的项目不会隐藏菜单,所以我一定要添加这个:
$('.navbar-collapse .dropdown-menu').click(function(){ $(".navbar-collapse").collapse('hide'); });
只要记住遍历DOM树并closures相关的导航栏,而不是所有的导航栏。 特别是对于Bootstrap 3,请使用类似于以下代码段的内容:
$("body").on("click", ".navbar-collapse a", function() { var $this = $(this); setTimeout(function() { $this.closest(".navbar-collapse").collapse('hide'); }, 350); });
另一个问题是,当你看到桌面上的导航栏,它试图隐藏/显示导航栏,所以我做了这个:
$('.navbar-collapse a:not(.dropdown-toggle)').click(function(){ if($(window).width() < 768 ) $('.navbar-collapse').collapse('hide'); });
我通过添加button点击pipe理完成答案:
$(document).on('click', '.navbar-collapse.collapse.in a:not(.dropdown-toggle)', function() { $(this).closest(".navbar-collapse").collapse('hide'); }); $(document).on('click', '.navbar-collapse.collapse.in button:not(.navbar-toggle)', function() { $(this).closest(".navbar-collapse").collapse('hide'); });
我的问题是,我正在用锚点创build单页面布局。 所以,当你缩小窗口,菜单隐藏链接点击完美。 感谢上面的用户谁给了我线索。 但是,当窗口变大时,绑定事件总是在那里(不用重新加载,尽pipe)。 所以,在这里我做了什么。 希望它可以帮助别人:)
jQuery.noConflict(); (function($){ $('ul#menu-menu-with-anchors li a, a[href="#top"]').click(function(){ $('html, body').animate({ scrollTop: $( $.attr(this, 'href') ).offset().top - ($('body').hasClass('admin-bar') ? 160 : 130) }, 500); return false; }); bindUnbindNavToggle($); $(window).resize(function(){ bindUnbindNavToggle($); }); })(jQuery); function bindUnbindNavToggle($){ if( $('button.navbar-toggle').css('display') != 'none' ) { $('.navbar-collapse ul li a').on('click', function(){ $('.navbar-collapse').collapse('hide'); return false; }); } else { $('.navbar-collapse ul li a').on('click', function(){ return false; }); } }
如果您使用Angular,则可以将折叠绑定到路线导航:
$scope.$on('$routeChangeSuccess', function(event, toState, toParams, fromState, fromParams){ $(".navbar-collapse").collapse('hide'); });
简单地把这个代码放在main.js中
$(document).on('click', '.navbar-collapse.in', function (e) { if ($(e.target).is('a')) { $(this).collapse('hide'); } });
也许有人需要隐藏菜单,只要点击到其他地方(我想应该没有子菜单)。 然后在jquery,bootstrap.js之后的某个地方添加这个代码
$('button.navbar-toggle').focusout(function(){ $(".navbar-collapse").collapse('hide'); });