Javascript 单击外部引导菜单将其关闭

Javascript 单击外部引导菜单将其关闭,javascript,jquery,css,twitter-bootstrap,menu,Javascript,Jquery,Css,Twitter Bootstrap,Menu,我试图找到解决方案,在单击引导菜单外部(移动窗口大小)时关闭引导菜单,但无法使其工作,我通过以下代码在单击其中一个“a”链接时使其工作: // menu buttons collapses when clicking a link $('document').ready(function() { if ($('a').on('click', function() { $('.collapse, #mainContain

我试图找到解决方案,在单击引导菜单外部(移动窗口大小)时关闭引导菜单,但无法使其工作,我通过以下代码在单击其中一个“a”链接时使其工作:

// menu buttons collapses when clicking a link
    $('document').ready(function() 
{
    if ($('a').on('click', function() 
            { 
                $('.collapse, #mainContainer').removeClass('in'); 
                $('.navbar-toggle').toggleClass('collapsed'); // button
            }));
});
但是如何通过点击菜单导航栏外的按钮来关闭菜单呢

这是我的页面,显示了问题所在

是的,我已经试过了,但没有成功:

答案如下:

(文档)。在('click',function()上{
$('.collapse')。collapse('hide');
})
希望有帮助:)

雷米

答案如下:

(文档)。在('click',function()上{
$('.collapse')。collapse('hide');
})
希望有帮助:)


Remy

假设您想在菜单外单击时执行与在菜单内单击时不同的操作(即折叠菜单),则您可能需要这样的操作来确定您是在菜单内还是在菜单外单击:

$('body').click(function(event){
  // check if the clicked element is a descendent of navigation 
  if ($(event.target).closest('.navigation').length) {
    return; //do nothing if event target is within the navigation
  } else {
  // do something if the event target is outside the navigation
     // code for collapsing menu here...
  }
});
大致显示了概念


当然,您需要将
.closest()
语句中的
'.navigation'
替换为导航容器的相应选择器

假设您希望在菜单外单击(即折叠菜单)时执行与在菜单内单击不同的操作,则您可能需要类似的操作来确定您是在菜单内还是在菜单外单击:

$('body').click(function(event){
  // check if the clicked element is a descendent of navigation 
  if ($(event.target).closest('.navigation').length) {
    return; //do nothing if event target is within the navigation
  } else {
  // do something if the event target is outside the navigation
     // code for collapsing menu here...
  }
});
  $(document).on('click',function(){
   $('.collapse').collapse('hide');
});
大致显示了概念

当然,您需要将
.closest()
语句中的
'.navigation'
替换为导航容器的相应选择器

  $(document).on('click',function(){
   $('.collapse').collapse('hide');
});
只需复制代码并跳过自定义脚本或index.html

谢谢雷米 单击外部以隐藏引导切换菜单关闭(隐藏)它

只需复制代码并跳过自定义脚本或index.html

谢谢雷米
点击外部隐藏引导切换菜单关闭(隐藏)它

在哪里查看网站?在哪里查看网站?在那里谢谢雷米,但我已经尝试过了。当我尝试这个并点击时,菜单根本不会出现。谢谢雷米,但我已经尝试过了。当我尝试此操作并单击时,菜单根本不会出现。ryandecker>我尝试了您的代码,并在单击时将其关闭,但仅当我单击导航栏时,问题可能是因为导航栏是index.html,而我在index.html中有一个iframe,它在index.html中打开mainpage.html。html
code
$(document)。就绪(函数(){$(文档)。单击(函数(事件){var clickover=$(event.target);var{u opened=$('.navbar collapse').hasClass('collapse in');if({u opened====true&!clickover.hasClass('navbar-toggle')){alert('opened');$('.collapse,#maincainer')。removeClass('in'));//菜单按钮折叠,htmlpage淡入/淡出后台fx运行$('.navbar toggle').toggleClass('collapsed');//按钮}}};});你能添加你的html吗?如果不知道html的结构,就不可能知道JS是否正确。很高兴仔细看看,但需要更多的信息来真正帮助你。另外,你完全正确,iframe改变了一些事情-实际上有一点。你的iframe与你的主页来自同一个域吗?为了它的价值,坐在你的座位上e(在你的问题中链接),我看不到nav有任何扩展…因此我无法说出目标行为是基于什么。谢谢Ryan,我尝试粘贴HTML,但评论时间太长。我使用了单击功能,但菜单仅在单击导航栏时关闭:我将新文件上载到服务器$(文档)。单击(功能(event){if($(event.target).is('page#u wrap,#wrap,img,#mainContainer,.container,#mainContainer.container,.col-lg-12.text-center,p.lead,div.jumbotron,div.navbar-header,h1')){警报('clicked:'event.target.nodeName,$)('collapse,#mainContainer').removeClass('in')).removeClass('in'))('in')).addClass('collapsed');}else{return;}});ryandecker>我尝试了您的代码,并在单击导航栏时将其关闭,但仅当我单击导航栏时,问题可能是因为导航栏是index.html,而我在index.html中有一个iframe,它在index.html
code
$(document)中打开mainpage.html.click(函数(事件){var clickover=$(event.target);var{u opened=$('.navbar collapse').hasClass('collapse in');if({u opened===true&&!clickover.hasClass('navbar-toggle')){alert('opened');$('.collapse,#maincainer')。removeClass('in'));//菜单按钮折叠,htmlpage淡入/淡出后台fx运行$('.navbar toggle').toggleClass('collapsed');//按钮}}};});你能添加你的html吗?如果不知道html的结构,就不可能知道JS是否正确。很高兴仔细看看,但需要更多的信息来真正帮助你。另外,你完全正确,iframe改变了一些事情-实际上有一点。你的iframe与你的主页来自同一个域吗?为了它的价值,坐在你的座位上e(在你的问题中链接),我看不到nav有任何扩展…因此我无法说出目标行为是基于什么。谢谢Ryan,我尝试粘贴HTML,但评论时间太长。我使用了单击功能,但菜单仅在单击导航栏时关闭:我将新文件上载到服务器$(文档)。单击(功能(event){if($(event.target).is('page#u wrap,#wrap,img,#mainContainer,.container,#mainContainer.container,.col-lg-12.text-center,p.lead,div.jumbotron,div.navbar-header,h1')){警报('clicked:'event.target.nodeName,$)('collapse,#mainContainer').removeClass('in')).removeClass('in'))('in')).addClass('collapsed');}else{return;}});