Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.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 如果我在document.body.addEventListener中单击任何子项、孙子项(以及更深层的项),如何获得“单击父项”标记_Javascript_Event Handling_Click_Dom Events_Addeventlistener - Fatal编程技术网

Javascript 如果我在document.body.addEventListener中单击任何子项、孙子项(以及更深层的项),如何获得“单击父项”标记

Javascript 如果我在document.body.addEventListener中单击任何子项、孙子项(以及更深层的项),如何获得“单击父项”标记,javascript,event-handling,click,dom-events,addeventlistener,Javascript,Event Handling,Click,Dom Events,Addeventlistener,我需要在script.js中应用事件委派方法。因此,我需要捕捉body标签上的所有“click”事件。这是无法改变的。我使用: document.body.addEventListener('click', function(event) { ... // here I catch clicks on different elements }, true); 我有一个父块和未知数量的内部嵌套块、子/孙/大…等等 我想单击父区域、子区域、孙子区域中的任意位置,然后我想在event.targe

我需要在script.js中应用事件委派方法。因此,我需要捕捉body标签上的所有“click”事件。这是无法改变的。我使用:

document.body.addEventListener('click', function(event) {
  ... // here I catch clicks on different elements
}, true);
我有一个父块和未知数量的内部嵌套块、子/孙/大…等等

我想单击父区域、子区域、孙子区域中的任意位置,然后我想在event.target.classList数组中捕获具有“parent”类名的事件

请参见示例代码

document.body.addEventListener('click',函数(事件){
警报(event.target.classList);
if(event.target.classList.contains('parent')){
/*我想用“parent”类名捕获某些目标*/
event.target.classList.toggle('yellow-background');
}
},对)
div{
边框:1px纯黑;
利润率:10px;
填充:10px;
}
家长{
边框宽度:3倍;
}
.集装箱{
宽度:300px;
背景颜色:浅灰色;
}
.家长{
背景颜色:浅蓝色;
光标:指针;
}
.孩子{
背景颜色:浅绿色;
}
.孙子{
背景色:青色;
}
.黄色背景{
背景颜色:黄色;
}
容器
父-它捕捉单击。好啊
子-不捕捉单击。
孙子-未捕捉到咔嗒声
孙子-不

使用
event.target.closest('.parent')
查看单击的元素是否有一个祖先,它是
.parent
。如果是,请更改父类,否则不执行任何操作:

document.body.addEventListener('click',函数(事件){
const parent=event.target.closest('.parent');
如果(家长){
parent.classList.toggle('yellow-background');
}
},对)
div{
边框:1px纯黑;
利润率:10px;
填充:10px;
}
家长{
边框宽度:3倍;
}
.集装箱{
宽度:300px;
背景颜色:浅灰色;
}
.家长{
背景颜色:浅蓝色;
光标:指针;
}
.孩子{
背景颜色:浅绿色;
}
.孙子{
背景色:青色;
}
.黄色背景{
背景颜色:黄色;
}
如果单击孙子/子/父元素中的任何一个,如何捕获父元素上的事件(event.target.classList应该包含“Parent”)?
容器
父-它捕捉单击。好啊
子-不捕捉单击。
孙子-未捕捉到咔嗒声
孙子
孙子
孙子
父-应捕获单击
孙子
孙子
孙子
孙子

只需将侦听器添加到
document.body
,让事件冒泡解决您的问题。

非常感谢!它很有效,这正是我所需要的。