Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在“打开”按钮区域外单击以关闭菜单?_Javascript_Jquery_Html_Css - Fatal编程技术网

Javascript 如何在“打开”按钮区域外单击以关闭菜单?

Javascript 如何在“打开”按钮区域外单击以关闭菜单?,javascript,jquery,html,css,Javascript,Jquery,Html,Css,单击特定按钮时会打开一个菜单 我想关闭菜单,也可以在按钮外单击 这是小提琴: 这可能吗 下面是javascript: (function() { var btn = $('#btn'); menu = $('nav ul'); menuHeight = menu.height(); $(btn).on('click', function(e) { e.preventDefault(); menu.slideToggle(); })

单击特定按钮时会打开一个菜单

我想关闭菜单,也可以在按钮外单击

这是小提琴:

这可能吗

下面是javascript:

(function() {
  var btn       = $('#btn');
  menu      = $('nav ul');
  menuHeight    = menu.height();

  $(btn).on('click', function(e) {
    e.preventDefault();
    menu.slideToggle();
  });

  $(window).resize(function(){
    var w = $(window).width();
    if(w > 320 && menu.is(':hidden')) {
      menu.removeAttr('style');
    }
  });
});

我强烈推荐jQuery outsideevents

$(btn).bind(“单击外部”,函数(事件){
//隐藏菜单的代码。
});

它完成了所有的工作,为你找到所有“不是按钮”的东西


我还应该提到,它的作用远不止单击外部,比如你可以检查它们是否也聚焦在外部,因此如果它们使用选项卡快捷方式来导航页面,菜单仍然关闭,等等。

你可以简单地将listener设置在body上

        $(".image").on('click', function(e) {
            e.preventDefault();
            menu.slideToggle();
        });

您确实希望在单击非
#btn
按钮后进行操作

$( document ).ready(function(){
  $('body *').not('#btn').click(function(){
     e.preventDefault();
     menu.slideToggle();
  })
});
不要忘记在事后取消连接事件。

执行此操作

    $('html').click(function() {
menu.slideUp();
});

$('.nav-wrapper').click(function(event){
    event.stopPropagation();
});

使用onblur事件。它与onfocus相反,在元素失去焦点时触发

onblur

$('body*:not('#btn'))。单击(function(){})
将事件侦听器分配给文档,以检查事件目标是否不是菜单关闭所述菜单,我想……形式战胜了内容。没有插件你也可以做同样的事情(看看源代码)。不,不,不,当然,没有插件你也可以做同样的事情。插件仅仅是代码,因此任何插件所做的任何事情都可以在没有插件的情况下完成。然而,我的观点是,您可以使您的应用程序更健壮、更容易。例如,在有人单击外部时关闭菜单对于屏幕阅读器来说不是很好。你应该处理制表符、焦点等问题,像“不,不,不,不”这样的回答不会增加讨论的价值。既然我已经给出了为什么这是一个比其他建议更好的主意的理由,那就说明为什么这是一个如此糟糕的主意吧。我试过了,但它又一次关闭了菜单。看这把小提琴:是的,对不起,身体意味着整个文件。您需要识别响应单击的元素。我已经更新了答案。通过这样做,我似乎也可以通过单击“.image”类打开菜单。这就是问题所在。除了我的当前代码,还是代替我的当前代码?将此添加到您的代码中您想要类似的内容吗??