Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使event.target引用div及其所有子级?(当鼠标单击不在div及其子对象上时检测)_Javascript_Html_Mouseevent - Fatal编程技术网

Javascript 如何使event.target引用div及其所有子级?(当鼠标单击不在div及其子对象上时检测)

Javascript 如何使event.target引用div及其所有子级?(当鼠标单击不在div及其子对象上时检测),javascript,html,mouseevent,Javascript,Html,Mouseevent,如何使event.target不仅适用于给定的div,而且适用于所有的孩子?我能想到的最好办法是: 1) 列出event.target函数中的所有子函数,即: window.addEventListener('mouseup', function (event) { if(event.target != div && event.target != divChild1 && event.target != divChild2 && event

如何使event.target不仅适用于给定的div,而且适用于所有的孩子?我能想到的最好办法是:

1) 列出event.target函数中的所有子函数,即:

window.addEventListener('mouseup', function (event) {

  if(event.target != div && event.target != divChild1 && event.target != divChild2 && event.target != divChild3 && event.target != divChild4 && event.target != divChild5 ... && event.target != divChildn) {

  closeWindow();

  } });

2) 将所有子类放在一个类中(这似乎是一个非常多的html),然后让event.target引用该类,即:

window.addEventListener('mouseup', function (event) {

      if(event.target != classWithAbout50divs) {

      closeWindow();

      } });
但肯定有一种方法需要更少的代码


请不要用jquery。谢谢

如果您只需要直接子级,您可以使用
元素.children
来循环遍历所述div的子级


否则
element.querySelectorAll('*')
应该将所有元素都包含在所述元素中。

您可以使用所提供答案的变体来检查
event.target
是否是所讨论的div或其任何子级

例如:

函数IsDescendatorSelf(父、子){
让节点=子节点;
while(节点!=null){
如果(节点==父节点){
返回true;
}
node=node.parentNode;
}
返回false;
}
window.addEventListener('mouseup',函数(事件){
const root=document.getElementById('handle');
如果(!IsDescendatorSelf(根,事件目标)){
console.log('Passed!');
}
});

你
不得
通过

我似乎找到了一个我喜欢的解决方案。第一件事是:

event.target != document.getElementsByClassName("myClassName");
如果引用了类,Event.target似乎不起作用。我只有在通过ID引用元素时才能使其工作。即:

event.target != document.getElementById("myDivId");
现在,如果我不想点击一个div和它的所有子对象,而是想让它发生一些事情,而不是写:

window.addEventListener('click', function (event) {
  if(event.target != myDivId) {
    doSomething();
    console.log("something is done");
  }
})
我发现这一点很成功:

window.addEventListener('click', function (event) {
  if(!myDivId.contains(event.target) {
    doSomething();
    console.log("something is done");
  }
})

有关潜在的支持问题,请参见

您能解释一下大局吗?通过实现此解决方案,您试图解决哪个问题?我试图使一个div及其子项在我单击屏幕上的任何位置时消失,只要我不单击实际的div或其子项。对,一种方法是将div放在一个填充透明覆盖div的窗口中,然后简单地检测覆盖上的点击