javascript - 当事件处理程序附加到父项时,防止在某个子项之后单击

标签 javascript

我有以下结构:

<ul id="list-items">
    <li class="item" data-id="123" data-title="Some Title">
        <div class="block">
            <img src="#"/>
            <a href="#">Link</a>
            <p>Some excerpt</p>
        </div>
    </li>
</ul>
  • 有超过 1 个 <li>
  • 所有 data-属性在 <li> 上元素

使用 jQuery,我通常会使用事件委托(delegate)而不是在每个 <li> 上附加事件处理程序。项目:

$( document ).on( 'click', '.item', function() {
    var id    = $( this ).data( 'id' );
    var title = $( this ).data( 'title' );
});

但是,我无法使用纯 JavaScript 复制它。 我希望能够点击 <li>项目而不单击其任何子元素。

我也不能随意使用 closest()因为我们必须为 IE11 提供支持。有没有更简单的实现方式?

编辑: 我避免将事件监听器附加到每个 <li>项,因为它不适用于动态创建的 <li>元素,也出于性能原因。

最佳答案

您可以通过设置 pointer-events: none 来禁止 li 的内容获取任何鼠标事件。

<li class="item" data-id="123" data-title="Some Title">
    <div class="block" style="pointer-events: none">
        <img src="#"/>
        <a href="#">Link</a>
        <p>Some excerpt</p>
    </div>
</li>

现在你可以保证 event.target 永远是 li

关于javascript - 当事件处理程序附加到父项时,防止在某个子项之后单击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56061840/

相关文章:

javascript - 在nodejs服务器中提供html文件

javascript - 如何从javascript对象在内存中创建一个Json文件?

javascript - Angular 4/5 中的事件处理程序性能问题

javascript - 使用 React、博客文章和 Wordpress API 进行动态路由

javascript - 用 JQuery/Javascript 替换字符串中的所有逗号

javascript - 为什么没有报segmentation fault

javascript - amcharts 更改 ID 数组的填充颜色

javascript - jQuery 多选提交顺序错误

javascript - cfml jquery 未捕获语法错误无效 token ?

javascript - 如何避免在 JavaScript 中解构未定义的值?