各位观众,各位听众,前端界的英雄好汉们!晚上好!我是今晚的讲师,一个在代码海洋里摸爬滚打多年的老水手,大家都叫我“Bug终结者”,今天,咱们不聊高并发,不谈大数据,咱们来点轻松有趣的,聊聊前端世界里两位“反骨仔”—— stopPropagation 和 preventDefault。

先别害怕,我说的“反骨仔”可不是贬义词,它们俩就像武侠小说里的侠客,专门阻止一些“恶霸行为”,维护咱们用户的利益,让网页交互更加流畅、更加可控。

今天,咱们就来一场“阻止事件冒泡与默认行为”的深度解剖,用最通俗易懂的语言,最生动形象的比喻,彻底搞懂这两位“反骨仔”的脾气秉性,让它们成为你手中的利器,而不是绊脚石。

一、事件机制:DOM世界的“传话筒”

在深入了解 stopPropagation 和 preventDefault 之前,我们需要先了解一下DOM(Document Object Model)的事件机制。你可以把它想象成一个信息传递系统,就像古代的烽火台,或者现代的微信群。

当用户在网页上进行操作,比如点击一个按钮、滚动鼠标滚轮、输入文字等等,这些操作都会触发相应的事件。这些事件就像一个个小信使,在DOM树上“奔走相告”,传递信息。

DOM事件机制主要分为三个阶段:

捕获阶段(Capturing Phase): 事件从根节点(window)开始,沿着DOM树向下传播,直到到达目标元素。就像皇帝发布圣旨,从皇宫一级一级传达到地方官员。

目标阶段(Target Phase): 事件到达目标元素,也就是用户直接操作的那个元素。就像圣旨最终送到了要执行任务的官员手中。

冒泡阶段(Bubbling Phase): 事件从目标元素开始,沿着DOM树向上冒泡,直到到达根节点。就像地方官员完成任务后,要一级一级向上汇报情况,直到皇帝知晓。

好了,现在让我们用一个简单的例子来模拟一下这个过程:

假设用户点击了