Wie erkennt man ein Klick-Außenelement?
P粉113938880
2023-08-23 13:37:35
<p>Ich habe einige HTML-Menüs, die ich vollständig anzeige, wenn der Benutzer auf die Kopfzeile dieser Menüs klickt. Ich möchte diese Elemente ausblenden, wenn der Benutzer außerhalb des Menübereichs klickt. </p>
<p>Ist das mit jQuery möglich? </p>
<pre class="brush:php;toolbar:false;">$("#menuscontainer").clickOutsideThisElement(function() {
// Menüs ausblenden
});</pre>
<p><br /></p>
您可以侦听
document
上的 click 事件,然后确保#menucontainer
不是被单击元素的祖先或目标通过使用.closest()
。如果不是,则单击的元素位于
#menucontainer
之外,您可以安全地将其隐藏。编辑 – 2017 年 6 月 23 日
如果您打算关闭菜单并想要停止侦听事件,您还可以在事件侦听器之后进行清理。此函数将仅清理新创建的侦听器,保留
document
上的任何其他点击侦听器。使用 ES2015 语法:编辑 – 2018 年 11 月 3 日
对于那些不想使用 jQuery 的人。这是上面的普通 vanillaJS (ECMAScript6) 代码。
注意: 这是基于 Alex 的评论,仅使用
!element.contains(event.target)
而不是 jQuery 部分。但是
element.closest()
现在也可在所有主要浏览器中使用(W3C 版本与 jQuery 版本略有不同)。 Polyfill 可以在这里找到:Element.closest()编辑 – 2020-05-21
如果您希望用户能够在元素内部单击并拖动,然后在元素外部释放鼠标,而不关闭元素:
在
outsideClickListener
中:将单击事件附加到关闭窗口的文档正文。将单独的单击事件附加到容器,以停止传播到文档正文。