javascript - 当父级上存在点击事件时忽略子级 href
问题描述
我希望能够将事件处理程序附加到以下代码段中的父元素,这将阻止子项的 href 或单击处理程序触发。我想避免找到所有的孩子,因为他们身上可能存在不同的点击处理程序。这可能吗,如何实现?
const parent = document.querySelector('.parent')
parent.onclick = e => {
console.log('parent clicked')
e.preventDefault()
e.stopPropagation()
}
const child = document.querySelector('a')
child.onclick = () => console.log('child clicked')
.parent {
margin: 10px;
padding: 20px;
width: fit-content;
border: 3px solid black;
}
<div class="parent">
<a href="stackoverflow.com"/>Hello there</a>
<div>
解决方案
Try this:
let parentClicked = false;
const parent = document.querySelector('.parent')
parent.onclick = e => {
parentClicked = true;
console.log('parent clicked')
e.preventDefault()
e.stopPropagation()
}
const child = document.querySelector('a')
child.onclick = (e) => {
if (parentClicked) e.preventDefault();
}
If that doesn't work then set the child element's disabled property to "true"
or "on"
, I forget which one.
But that way you can dynamically set it's disabled property with JavaScript.
推荐阅读
- ios - theos 编译缺少的 sdk 框架头文件
- python - 如何将相应的 HTML 结尾附加到每条抓取的文本?
- php - 如何在 PHP Laravel 中隐藏 URL 值
- node.js - 如何使用 Axios + 文本字段数据发送文件
- reactjs - 开玩笑嘲笑 MobX 商店在测试之间没有重置
- sql-server - Spark JDBC SQL 连接器“SELECT INTO”语句
- phpstorm - PhpStorm 无法识别方法、类
- swiftui - 如何在 SwiftUI 视图中重用警报对话框?
- python - 在链式 loc 和 iloc 之后更改 pandas 中的值
- mysql - 更改计数器变量后停止运行循环