Comment détecter un clic à l'extérieur d'un élément ?
P粉113938880
2023-08-23 13:37:35
<p>J'ai quelques menus HTML que j'affiche entièrement lorsque l'utilisateur clique sur l'en-tête de ces menus. Je souhaite masquer ces éléments lorsque l'utilisateur clique en dehors de la zone de menu. </p>
<p>Est-ce possible avec jQuery ? </p>
<pre class="brush:php;toolbar:false;">$("#menuscontainer").clickOutsideThisElement(function() {
// Masquer les menus
});</pré>
<p><br /></p>
Vous pouvez écouter
document
上的 click 事件,然后确保#menucontainer
不是被单击元素的祖先或目标通过使用.closest()
.Sinon, l'élément cliqué est à l'extérieur
#menucontainer
et vous pouvez le masquer en toute sécurité.Edit – 23 juin 2017
Vous pouvez également nettoyer après l'écouteur d'événements si vous envisagez de fermer le menu et souhaitez arrêter d'écouter les événements. Cette fonction nettoiera uniquement les écouteurs nouvellement créés, laissant tous les autres écouteurs de clic activés
document
. Utilisation de la syntaxe ES2015 :Edit – 3 novembre 2018
Pour ceux qui ne veulent pas utiliser jQuery. Il s'agit du code simple vanillaJS (ECMAScript6) ci-dessus.
Remarque : Ceci est basé sur le commentaire d'Alex, en utilisant simplement le
!element.contains(event.target)
au lieu de la partie jQuery.Mais
element.closest()
fonctionne désormais également dans tous les principaux navigateurs (la version W3C est légèrement différente de la version jQuery). Polyfill peut être trouvé ici : Element.closest()Modifier – 2020-05-21
Si vous souhaitez que l'utilisateur puisse cliquer et faire glisser à l'intérieur d'un élément puis relâcher la souris en dehors de l'élément sans fermer l'élément :
dans
outsideClickListener
:Attachez un événement de clic au corps du document de la fenêtre fermée. Attachez un événement de clic distinct au conteneur pour arrêter la propagation vers le corps du document.