我如何才能检测到点击是否在某个元素内部,该元素的侦听器是由一个类 Select 的?

例如,我有几个类名为"my-class"的元素:

<div class="my-class">
    <button>Hello</button>
    <p>World</p>
</div>
<div class="my-class">
    <a href="">Click</a>
    <a href="">Here</a>
</div>

如果我只听这个类,如果点击内部元素,它就不会起作用:

document.addEventListener("click", function(event) {
    if(event.target.classList.contains("my-class") {
        // 
    }
});

我怎样才能检测到点击里面的任何元素呢?

我发现了以下问题,但它只适用于由id Select 的单个元素,并且没有委托:Detect click inside/outside of element with single event handler

推荐答案

使用Element::closest()判断my-classmy-class内部单击的元素本身:

https://developer.mozilla.org/en-US/docs/Web/API/Element/closest

document.addEventListener("click", function(event) {
    if(event.target.closest(".my-class")) {
        console.log('my-class clicked!');
    }
    event.preventDefault();
});
<div class="my-class">
    <button>Hello</button>
    <p>World</p>
</div>
<div class="my-class">
    <a href="">Click</a>
    <a href="">Here</a>
</div>

Javascript相关问答推荐

我不知道为什么我的JavaScript没有验证我的表单

如何访问Json返回的ASP.NET Core 6中的导航图像属性

我不知道为什么setwritten包装promise 不能像我预期的那样工作

MongoDB中的引用

React 17与React 18中的不同setState行为

Redux查询多个数据库Api reducerPath&

成功完成Reducers后不更新状态

如何将Cookie从服务器发送到用户浏览器

在HTML语言中调用外部JavaScript文件中的函数

如何在Angular拖放组件中同步数组?

为什么客户端没有收到来自服务器的响应消息?

自定义确认组件未在vue.js的v菜单内打开

将范围 Select 器添加到HighChart面积图

判断函数参数的类型

自动滚动功能在当前图像左侧显示上一张图像的一部分

react 路由DOM有条件地呈现元素

Refine.dev从不同的表取多条记录

Reaction-在同一页内滚动导航(下拉菜单)

使用Java脚本筛选数组中最接近值最小的所有项

ReactJS Sweep Line:优化SciChartJS性能,重用wasmContext进行多图表渲染