gpt4 book ai didi

javascript - JavaScript 中的事件冒泡

转载 作者:行者123 更新时间:2023-11-29 19:26:24 25 4
gpt4 key购买 nike

关于冒泡的定义,我似乎无法理解。

我知道事件冒泡意味着事件从内部元素传播到外部元素。我还知道您可以使用 addEventListener() 的最后一个可选参数“选择”您的传播方式。

我不明白的是这个:

<body>
<div id = "divi">
<p id = "para">Paragraph</p>
</div>

<script>
var elementd = document.getElementById('divi');

elementd.addEventListener("click", MessageD);

function MessageD(){
alert('A message');
}
</script>
</body>

在这里,我将点击事件附加到我的 div 元素。默认情况下,点击事件是冒泡的,也就是说他是通过DOM往上走的。但是当我点击我的段落时,点击事件被执行。

据我了解,这意味着点击事件首先传播到“p”子元素,或者向下传播到 DOM。有人可以向我解释为什么以及会发生什么吗?谢谢!

--- 一些答案后编辑---

也许通过这个例子可以更好地解释困扰我的问题:

<body>
<style>
#myDiv, #results {
margin: 50px;
}

#myDiv {
padding: 10px;
width: 200px;
text-align: center;
background-color: #000;
}

#myDiv div {
margin: 10px;
background-color: #555;
}
</style>

<div id="myDiv">
<div>Text 1</div>
<div>Text 2</div>
<div>Text 3</div>
<div>Text 4</div>
</div>

<div id="results"></div>

<script>
var myDiv = document.getElementById('myDiv'),
results = document.getElementById('results');

myDiv.addEventListener('mouseover', function() {
results.innerHTML += "I'm in.<br />";
}, false);

myDiv.addEventListener('mouseout', function() {
results.innerHTML += "I'm out.<br />";
}, false);
</script>
</body>

如果您尝试运行此代码,您将在每次进入和退出子 div 时“退出”和“进入”...这意味着您将“进入”子 div。

这是否意味着事件从父级传播到子级,或者向下传播?

---最终编辑---我终于明白了:我把事件和事件处理器搞混了。

事件只是一次点击,因此页面中的任何内容都可以接收它。单击后,此单击事件将转到 DOM 的顶部,当它遇到单击事件处理程序时,将执行与事件处理程序关联的函数。

谢谢大家!

最佳答案

To my understanding, that means that the click event propagates to the "p" child element first, or DOWN the DOM.

没有。在这种情况下,p 元素是事件的目标。事件传播到 div 元素。 div 元素有一个 click 处理程序并被执行。

这就是事件的运作方式。事件的目标是触发事件的元素,目标可以是您已将监听器附加到的元素或其子/后代之一。 event 对象的 target 属性指的是事件的目标元素,当使用 addEventListener 附加事件监听器时,this 处理程序的值是指处理程序的所有者,在本例中是 div 元素。

您已附加事件监听器这一事实与事件的工作方式无关。每当用户单击时都会触发单击事件。是您,开发人员,附加了一个事件监听器,用于监听为元素触发的特定事件。如果您不附加监听器,事件仍会被触发。

关于javascript - JavaScript 中的事件冒泡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30539907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com