javascript - 事件如何冒泡到文档而不是 document.body?
问题描述
最近我遇到了一些与事件冒泡相关的有趣行为。我创建了一个代码笔来说明这一点:https ://codepen.io/anon/pen/XGmxXr
我所做的只是绑定两个事件监听器(或者我猜三个,包括删除按钮的那个)。一个在文档上,一个在 document.body 上。
单击按钮时,只会显示文档中的 console.log。
为什么?事件不会先到 document.body 然后再到文档吗?
或者换一种方式问:一个事件怎么会冒泡到文档而不是文档主体?
$(document).on("click", "button", () => console.log("document knows"));
$(document.body).on("click", "button", () =>
console.log("document body knows")
);
$("button").on("click", e => $("button").remove());
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button>Click me</button>
解决方案
这已经是一个与 jQuery 事件相关的问题。使用普通的 DOM APIdocument
并document.body
得到正确的通知:
document.addEventListener("click", (e) => {
if (e.target.tagName === 'BUTTON') {
console.log("document knows");
};
});
document.body.addEventListener("click", (e) => {
if (e.target.tagName === 'BUTTON') {
console.log("document.body knows");
};
});
document.querySelector("button").addEventListener("click", function(e) {
this.parentElement.removeChild(this);
})
<button type="button">Click me</button>
推荐阅读
- c# - 无法将 HttpResponseMessage 反序列化为模型对象
- performance - Cassandra - 单节点单表批量插入性能不佳
- c# - ILGenerator:如何生成一个 Func<> 作为参数传递
- java - 如何重启 JavaHost 进程?
- sql-server - Azure 流分析作业降级,没有运行时错误
- node.js - mongoos 嵌套查询,等待第二个查询返回数据
- html - 带有 z-index:-1 的 div 中的元素即使 z-index 大于 -1 也不会显示
- google-cloud-platform - 我可以从现有 AI Platform Notebook 生成 gcloud 语句吗?
- c++ - 定义 QML 信号参数类型时出现意外的 Token `:'
- scala - 在加特林检查地图