javascript - stopPropagation 和 preventDefault 不起作用,父点击仍在触发
问题描述
在我的代码中,我添加onclick
了父 div 并希望对内部 div 执行其他操作,但单击内部 div 也会触发父级点击。如何阻止?
$(document).on('click', '.child', function(e) {
e.preventDefault();
e.stopPropagation();
console.log('child');
});
function parentfun(sender) {
console.log('parent');
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="parent" onclick="parentfun(this)">
parent
<div class="child">child</div>
</div>
点击孩子,也会触发父母的点击。preventDefault 和 stopPropagation 不起作用。
仅供参考:我的问题与单击子锚点时如何防止触发父母的 onclick 事件不同?
解决方案
您实际上在这里所做的是将单击事件绑定到文档,而不是子元素。所以事件已经一直冒泡到文档中,试图用 stopPropagation 阻止冒泡已经太迟了。
当我将点击处理程序更改为孩子时,请参见此处:
$(".child").on('click', function(e) {
e.preventDefault();
e.stopPropagation();
console.log('child');
});
function parentfun(sender) {
console.log('parent');
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="parent" onclick="parentfun(this)">
parent
<div class="child">child</div>
</div>
编辑
随着问题发生了一些变化,如果元素是动态创建的,您可以执行以下操作(例如):
$(document).on('click', '.parent, .child', function(e) {
e.stopPropagation();
if ($(this).is(".child")) {
console.log('child');
} else {
console.log('parent');
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="parent">
parent
<div class="child">child</div>
</div>
推荐阅读
- sas - 在 SAS DATA 步骤中使用 WHERE SAME AND 运算符
- matlab - 每次迭代后循环输出相同的“ev”值
- python - 在Python中按索引删除列表中的多个元素
- javascript - Angular,删除来自数据库的 HTML 标签
- spring - @PostConstruct 和在配置类中使用 new 创建的 bean
- angularjs - 打开引导模式弹出窗口时启用背景以进行编辑和工作
- unity3d - SceneManager 没有激活我之前的场景
- python - 在 python 文件中插入文档字符串属性
- angular - 带有 Angular 组件的 Safari 中的粘性位置
- r - 计算 R 中面板数据的相关矩阵