javascript - jQuery 触发事件首先附加在子项上,然后是其父项的事件

标签 javascript jquery

附加在子项上的事件比它的父项先触发,我认为它的默认行为,无论如何它可以以替代方式工作吗?

这是一个工作示例:http://jsfiddle.net/dhiru/rb99n7uh/4/

<div class="parent">Parent
    <div class="children">Child</div>
</div>
<div class="result">Result here</div>

$('.parent').on('click', function () {
    $('.result').append('<p>Parent Clicked</p>');
});
$('.children').on('click', function () {
    $('.result').append('<p>Child Clicked</p>');
});

在某种情况下,我想触发附加在其父事件中的事件,而不是其子事件中的事件,甚至点击了子事件。我知道可以通过对子元素进行一些调整来修复它,但我不想更改其子元素中附加的事件,因为它是由第 3 方插件附加的。

最佳答案

您不能优先执行父事件而不是元素事件。如果事件附加到同一个对象,那么它们将以相同的顺序执行。

但是你的情况不是这样的。第一个事件附加到父元素,另一个事件附加到元素本身。在这种情况下,首先执行的第一个事件是事件开始的地方,在您的情况下是子元素。而且您无法覆盖此行为。

但是,您可以在子元素事件中使用 stopPropagation 来防止事件冒泡(以停止父事件传播到子元素):

$('.children').on('click', function (e) {
 e.stopPropagation()
 $('.result').append('<p>Child Clicked</p>');
});

Working Demo

关于javascript - jQuery 触发事件首先附加在子项上,然后是其父项的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32199681/

相关文章:

javascript - $ 在 onload 中不可用

javascript - 如何将两个数组组合成一个具有键值对的对象?

javascript - 在 meteor 中将元素添加到数组 collections.update

javascript - BootStrap 下拉选项 - 限制选项更改的 TAB 键

html - 使用 jQuery 手动触发表单验证

javascript - css 转换中的奇怪行为 :rotate

javascript - Codeigniter:使用 jQuery ajax 提交表单数据而不刷新页面

javascript - 使用 jQuery 自动刷新 div - setTimeout 或其他方法?

javascript - 如何在javascript中将日期时间从用户时区转换为EST

javascript - -= 属性后的变量