javascript - 父子 div 上的事件处理程序
问题描述
这是我的 HTML 文件
<div class="a">
<div class="b">
</div>
</div>
<script>
document.querySelector('.a').onclick = ()=>{
document.querySelector('.a').style.backgroundColor ='black'
}
document.querySelector('.b').onclick = ()=>{
document.querySelector('.b').style.backgroundColor ='violet'
}
</script>
当我点击 'b' 类的 div 时,也会调用 'a' 类的 div 上的事件处理程序。我只想调用带有“b”类事件处理程序的 div。有人可以帮忙吗?
解决方案
这是Event Bubbling
,这意味着每个事件不仅会在目标元素上触发,还会在其祖先元素上触发。
为了防止这种行为,您可以使用Event.stopPropagation()
来阻止事件传播到目标元素的祖先元素。
document.querySelector('.a').onclick = () => {
document.querySelector('.a').style.backgroundColor = 'black'
}
document.querySelector('.b').onclick = (event) => {
event.stopPropagation();
document.querySelector('.b').style.backgroundColor = 'violet'
}
div { width: 100px; height: 100px; }
.a { padding: 40px; background: red; }
.b { background: blue; }
<div class="a">
a
<div class="b">b</div>
</div>
推荐阅读
- hadoop - 从 hdfs 到 GreenPlum 的 Sqoop 导出不起作用
- android - 从本地主机流式传输视频
- ios - 如何按照与另一个实体的关系顺序从 CoreData 获取实体
- c++ - 从图像 C++ 中识别字符
- mysql - How could I get the top X records per distinct column within each range of Y timestamp, for some other column Z?
- python - 尝试在 CentOS 上以守护程序模式配置 Django/mod_wsgi 应用程序时,python-home 选项失败
- r - 基于闪亮的 dateRangeInput 值的列名
- typescript - 完成编译后打字稿会自动启动快速服务器吗
- ruby - 配置 Sensu 以从 Prometheus 收集指标;使用红宝石
- django - Django 收到错误:send_mail() 在发送邮件时收到了意外的关键字参数“fail_silently”