J'ai un div avec id = "content-area", lorsqu'un utilisateur clique en dehors de cette div, je souhaite l'avertir du fait qu'il a cliqué en dehors de cette div Comment utiliser JavaScript pour résoudre ce problème?
<div id = "outer-container">
<div id = "content-area">
Display Conents
</div>
</div>
Découvrez ce violon et voyez si c'est ce que vous recherchez!
document.getElementById('outer-container').onclick = function(e) {
if(e.target != document.getElementById('content-area')) {
document.getElementById('content-area').innerHTML = 'You clicked outside.';
} else {
document.getElementById('content-area').innerHTML = 'Display Contents';
}
}
Liez l'événement onClick à un élément situé en dehors de votre zone de contenu, par exemple. le corps. Ensuite, dans l'événement, vérifiez si la cible est la zone de contenu ou un enfant direct ou indirect de la zone de contenu. Si non, alors alerte.
J'ai créé une fonction qui vérifie si c'est un enfant ou non. Il renvoie true si le parent d'un nœud est le parent recherché. Si non, alors il vérifie s'il a réellement un parent. Sinon, il retourne faux. S'il a un parent, mais pas celui recherché, il vérifie si le parent du parent est le parent recherché.
function isChildOf(child, parent) {
if (child.parentNode === parent) {
return true;
} else if (child.parentNode === null) {
return false;
} else {
return isChildOf(child.parentNode, parent);
}
}
Consultez également le Exemple en direct (zone de contenu = gris)!
La méthode Node.contains () renvoie une valeur booléenne indiquant si un nœud est un descendant d'un nœud donné ou non.
Vous pouvez attraper des événements en utilisant
document.addEventListener("click", clickOutside, false);
function clickOutside(e) {
const inside = document.getElementById('content-area').contains(e.target);
}
N'oubliez pas de supprimer l'événement écouté au bon endroit
document.removeEventListener("click", clickOutside, false)
J'ai fait une bibliothèque simple et simple js pour le faire pour vous:
Il détourne addEventListener natif, pour créer un événement de surclick et a également un setter sur le prototype pour .onoutclick
Utilisation de base
En utilisant outclick, vous pouvez enregistrer des écouteurs d’événements sur des éléments DOM pour détecter si un autre élément qui était cet élément ou un autre élément à l'intérieur de celui-ci a été cliqué. L'utilisation la plus courante de ceci est dans les menus.
var menu = document.getElementById('menu') menu.onoutclick = function () { hide(menu) }
cela peut aussi être fait en utilisant la méthode addEventListener
var menu = document.getElementById('menu') menu.addEventListener('outclick', function (e) { hide(menu) })
Alternativement, vous pouvez également utiliser l'attribut html outclick pour déclencher un événement. Cela ne gère pas le code HTML dynamique, et nous n’avons pas l’intention de l’ajouter pour le moment.
<div outclick="someFunc()"></div>
S'amuser!
Utilisez document.activeElement
pour voir lequel de vos éléments HTML est actif.
Voici une référence: document.activeElement in MDN
$('#outer-container').on('click', function (e) {
if (e.target === this) {
alert('clicked outside');
}
});
C'est pour le cas où vous cliquez à l'intérieur du outer-container mais à l'extérieur de la content-area .
Voici le violon: http://jsfiddle.net/uQAMm/1/
$('#outercontainer:not(#contentarea)').on('click', function(event){df(event)} );
function df(evenement)
{
var xstart = $('#contentarea').offset().left;
var xend = $('#contentarea').offset().left + $('#contentarea').width();
var ystart = $('#contentarea').offset().top;
var yend = $('#contentarea').offset().top + $('#contentarea').height();
var xx = evenement.clientX;
var yy = evenement.clientY;
if ( !( ( xx >= xstart && xx <= xend ) && ( yy >= ystart && yy <= yend )) )
{
alert('out');
}
}
utiliser jquery comme son meilleur pour l'accès DOM
$(document).click(function(e){
if($(e.target).is("#content-area") || $(e.target).closest("#content-area").length)
alert("inside content area");
else alert("you clicked out side content area");
});
Mettez ceci dans votre document:
<script>
document.onclick = function(e) {
if(e.target.id != 'content-area') alert('you clicked outside of content area');
}
</script>