javascript - Javascript,停止 preventDefault() 以传递给子元素
问题描述
我有一个 div 容器,由于某种原因我必须在其中添加e.preventDefault()
,但令人惊讶的是它也会阻止锚元素来完成它们的工作
jQuery('#anything').on("click", function(e) {
e.preventDefault();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="anything">
<a href="https://google.com"> Link should work </a>
</div>
没想到anchor不工作,我以前从来没有处理过这个。我按照某处的建议尝试StopPropagation()
了,但这没有用
我怎样才能让锚再次工作?
解决方案
一种选择是使用事件委托并a
从触发侦听器中排除所有 s:
jQuery('#anything').on("click", '*:not(a)', function(e) {
e.preventDefault();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="anything">
<a href="https://google.com"> Link should work </a>
</div>
或者,如果您想确保#anything
触发侦听器的子项内部没有点击,请将#anything
其作为委托选择器。这次在原生 Javascript 中:
document.querySelector('#anything').addEventListener('click', (e) => {
console.log('listener running');
if (!e.target.matches('#anything')) return;
console.log('prevented default');
e.preventDefault();
});
<a href="www.google.com" id="anything">Parent A<span>Child Span</span></a>
(虽然,preventDefault()
只是一个div
没有多大意义..?)
推荐阅读
- r - cor(x, y, method = c("pearson", "kendall", "spearman")) 中的错误:未使用的参数 (method = c("pearson", "kendall", "spearman"))
- javascript - 将数据从 NodeJS 服务器流式传输到 .NET CORE 的方式?
- pine-script - 松树 - 有一个可选的指标和一个必需的指标
- typescript - Firestore 和 Typescript 的动态 Where 条件
- python - 从熊猫数据框列中减去增加的值
- html - 导航栏下 100% 宽度的 div 显示滚动条
- sql - 如何在一个查询中从该字段的其余值中获取字段值的 COUNT 以及该相同值的“总数百分比”?
- node.js - npm install local package 创建符号链接
- linux - dhclient.conf 修改不会改变 resolv.conf
- python - leetcode 硬币找零问题没有给出正确的结果