繁体   English   中英

将点击事件绑定到除两个之外的所有元素

[英]Bind click event to all elements except two

我有一个菜单和一个按钮来切换这个菜单:

<a id="openMenu" onclick="openMenu()">Menu</a>
<div class="menu">..menu stuff..</div>

现在我想在整个<body>上绑定一个点击事件,除了两个描述的元素。 单击事件是,当<menu>可见并且用户单击<body>内的任何位置时, <menu>应该再次关闭。

我有以下代码:

 var menuComponents = $(".menu, #openMenu").children(); $("body").not(menuComponents).on("mousedown", function (event) { if ($(".menu").attr("active") == "true") { setActive(".menu"); } });

但是现在当menu打开时,我单击<a id="openMenu"...>按钮再次关闭menu ,它被关闭并立即再次打开。 那么,是否可以从正文中排除menuopenMenu按钮?

是否有任何提示说明为什么会出现这种行为?

如果单击的元素( e.target )是链接.toggle()菜单,则将侦听器添加到body - 否则任何其他单击将默认关闭菜单。

顺便说一句,有些事情你不应该做(特别是如果你使用 jQuery)。

  • 内联事件处理程序是垃圾,所以不要使用它们。

  • #id只会妨碍您更新和扩展代码的能力,因此请使用类。 有几次可能需要#id ,但在目前的情况下不需要。

     <a /*id*/="useClassNotID" /*onclick="DoNotUse(this)"*/>Menu</a>

 $(document).click(function(e) { if ($(e.target).is('.openMenu')) { $('.menu').toggle({ duration: 500 }); } else { $('.menu').hide({ duration: 500 }); } });
 <a href='#' class="openMenu">Menu</a> <section class="menu"> <ul> <li><a href='#'>Link</a></li> <li><a href='#'>Link</a></li> <li><a href='#'>Link</a></li> <li><a href='#'>Link</a></li> <li><a href='#'>Link</a></li> </ul> </section> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM