<!DOCTYPE html>
<html>
<head>
<style>
.dropdown-content a{
display: block;
background-color: blue;
}
</style>
</head>
<body>
<div class="dropdown-content">
<a>1</a>
<a>2</a>
</div>
<script>
window.onclick = function(event){
if(!event.target.matches('.dropdown-content')){
alert("foo");
}
};
</script>
</body>
</html>
我正在尝试仅在我们没有点击正文中alert(foo);
标记内的任何内容时执行div
。不幸的是,无论我点击哪里,它都会执行。为什么呢?
答案 0 :(得分:2)
window.onclick = function(event){
if (document.getElementsByClassName('dropdown-content')[0].contains(event.target)){
// inside
} else{
// outside
alert('foo');
}
};
.dropdown-content a{
display: block;
background-color: blue;
}
<div class="dropdown-content">
<a>1</a>
<a>2</a>
</div>
获取您的元素并使用contains检查点击是在内还是外。如果在外面然后警告。
matches
无效,因为您点击的a
代码中没有.dropdown-content
代码。所以每次价值都是假的。它alert('foo')
答案 1 :(得分:0)
正如我所见,您必须向de div.conta添加内容,我制作了demo 并使用dom,className(imade右,但可以使用任何):
<div class="dropdown-content">
abc
<a class="name">1</a>
<a>2</a>
</div>
window.onclick = function(event){
console.log(event.target.className);
if(event.target.className!=='dropdown-content'){
console.log("foo");
}
};
答案 2 :(得分:0)
如果你正在使用jQuery,你可以执行以下操作:
$(event.target).closest('.dropdown-content').length
请参阅以下JSFiddle: https://jsfiddle.net/4nb691a0/
答案 3 :(得分:-1)
因为你的if语句返回false
并且!运算符返回true
。这是因为当您在div中单击时,您的实际目标是<a>
元素,其中没有类.dropdown-content
。
在div外部点击时,它也没有类.dropdown-content
。所以你的语句总是返回false
但是!运算符变为true
。
试试这个:
<!DOCTYPE html>
<html>
<head>
<style>
.dropdown-content a{
display: block;
background-color: blue;
}
</style>
</head>
<body>
<div class="dropdown-content">
<a class="link">1</a>
<a class="link">2</a>
</div>
<script>
window.onclick = function(event){
if(!event.target.matches('.link')){
alert("foo");
}
};
</script>
</body>
</html>
&#13;