【发布时间】:2016-12-22 16:22:15
【问题描述】:
我希望我的 CustomEvent 能够从文档传播到所有 DOM 元素。 由于某种原因,它不会发生。我做错了什么?
<html>
<script>
function onLoad() {
var myDiv = document.getElementById("myDiv");
myDiv.addEventListener("myEvent",function(){alert("Yes!");});
document.dispatchEvent(new CustomEvent("myEvent",{detail:null}));
}
</script>
<body onload="onLoad()">
<div id="myDiv"></div>
</body>
</html>
【问题讨论】:
-
是的,但我不想直接这样做。在我的真实代码中,DOM 结构是动态的,元素来来去去,所以我希望事件处理程序仅在其元素附加到 DOM 时才处于活动状态。
-
可能是一个冒泡的事情。你试过
myDiv.addEventListener("myEvent",function(){alert("Yes!"), true}); -
是的,我做到了,无论是真的还是假的。没用。
-
这是一个完整且可验证的示例。如果事件被传播,您应该看到“是!”警报。只需复制代码并在浏览器中运行即可。
-
@Rediska 我提供的小提琴修复了你的代码来做到这一点。如果这是minimal reproducible example,那么答案就是正确的。您完整的示例表明您知道要在哪个元素上触发事件。如果不是,那么我给出的关于事件传播如何工作的解释将表明,鉴于您提供的信息,不可能做您想做的事情。
标签: javascript html dom event-propagation custom-event