javascript - 嵌套列表项上的单击事件每个都有自己的单击处理程序

标签 javascript jquery

我在每个 li 元素上嵌套了无序列表和单击处理程序。当单击嵌套的 li 时,它会触发这两个事件。有什么办法可以阻止这种行为吗?

<ul>
    <li>thundercats
        <ul>
            <li>panthero</li>
            <li>cheetarah</li>
        </ul>
    </li>
</ul>

因此,在上面的列表中,单击“thundercats”将触发一个将值设置为“thundercats”的事件,单击 panthero 将触发另一个将值设置为 panthero 的事件。

不幸的是,单击 panthero 会导致该值瞬间正确设置,然后 Thundercats 上的单击处理程序会触发并覆盖该值。有没有办法防止这种情况发生?

最佳答案

一种选择是防止事件在 DOM 树中冒泡。这会起作用,但它不是最佳的,因为有时事件冒泡非常有用。最好检查事件是否源自正确的元素:

$('li').click(function(event) {
    if (this === event.target) {
        // do your code
    }
});

这段代码之所以有效,是因为 thisevent.target 都指向 DOM 元素。 this 是处理事件处理程序的元素(运行代码的位置),而 event.target 是事件发起的元素,即被单击的元素。如果它们是相同的元素,则事件在与处理事件的元素相同的元素上触发;这是您希望运行代码的地方,而不是其他地方。将元素与 === 进行比较即可完成此操作。

关于javascript - 嵌套列表项上的单击事件每个都有自己的单击处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7602350/

相关文章:

javascript - 使用 JavaScript 和 jQuery 生成 HTML - JavaScript 不执行?

javascript - Jquery:ajax循环

javascript - jQuery .data() 和插件

javascript - JSP 聊天 - 如何将 HTML 中的值解析为 JSP 页面?

javascript - 从日期中删除 1 周并保留格式

javascript - 查询 MongoDB 中的嵌套数组

c# - 将参数从代码隐藏传递给 javascript 函数,错误

javascript - Highcharts : cross symbol with fillColor

jQuery 自动完成/Twitter Typeahead 填充多个字段

jquery - `overflow-x: hidden` 内的元素仍然有宽度(Safari)