JavaScript 事件冒泡简介及应用

JavaScript 事件冒泡简介及应用

事件冒泡是指在 HTML 的 DOM 树结构中,当某个元素触发了一个事件后,它会向父元素逐层传递,直至到达文档根节点。这种事件传递方式被称为事件冒泡。

冒泡机制的触发方式

当一个元素触发一个事件时,事件将从触发元素开始,然后向上冒泡到它的父元素,父元素的父元素,依此类推,直到冒泡到文档中的根元素为止。整个过程称为事件冒泡。

如何阻止事件冒泡

在事件处理程序中,可以使用 event.stopPropagation() 方法阻止事件冒泡:

document.querySelector('#inner').addEventListener('click', function(event) {
  console.log("Inner div clicked!");
  event.stopPropagation();
});

document.querySelector('#outer').addEventListener('click', function(event) {
  console.log("Outer div clicked!");
});

当点击 Inner 元素时,只会输出 Inner div clicked! ,而外层的 Outer 元素不会触发 click 事件,也就不会有输出。

事件委托

事件委托是利用事件冒泡机制实现的,它的原理就是将事件绑定到它的父节点上,利用事件冒泡的机制,触发到子节点的时候也会冒泡到父节点。这样我们就不需要在每个子元素上都绑定事件处理函数,而是把它绑定到它们的父元素上,从而提高性能。

以列表元素为例,如果我们需要在每个列表元素上绑定单击事件,可以像下面这样实现:

const myList = document.querySelector('#myList');

myList.addEventListener('click', function(event) {
  if (event.target.nodeName === 'LI') {
    console.log('List item clicked with text: ' + event.target.innerText);
  }
});

这里是给父元素 myList 绑定了 click 事件,当事件冒泡到 myList 时,判断是否点击的确实是 li 元素,然后输出列表元素包含的文本内容。

示例

示例一

HTML 代码:

<div id="outer">
  <div id="inner">Click me</div>
</div>

JS 代码:

document.querySelector('#inner').addEventListener('click', function(event) {
  console.log("Inner div clicked!");
  event.stopPropagation();
});

document.querySelector('#outer').addEventListener('click', function(event) {
  console.log("Outer div clicked!");
});

输出:

Inner div clicked!

示例二

HTML 代码:

<ul id="myList">
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
</ul>

JS 代码:

const myList = document.querySelector('#myList');

myList.addEventListener('click', function(event) {
  if (event.target.nodeName === 'LI') {
    console.log('List item clicked with text: ' + event.target.innerText);
  }
});

输出:

List item clicked with text: Item 1
List item clicked with text: Item 2
List item clicked with text: Item 3

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript 事件冒泡简介及应用 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • tree shaking对打包体积优化及作用

    什么是Tree Shaking Tree Shaking 是指在打包过程中,检测出未被引用的代码,并在最终打包结果中将这些未引用的代码(也被称为“未引用代码(dead code)”)移除。Tree Shaking 目的是为了精简打包后的代码和减小文件体积,提升网页加载速度。 在理解 Tree Shaking 之前需要了解几个概念:- 模块 (Module):…

    JavaScript 2023年6月11日
    00
  • Javascript Date constructor 属性

    以下是关于JavaScript Date对象的constructor属性的完整攻略。 JavaScript Date对象的constructor属性 JavaScript Date对象的constructor属性返回对创建该对象的构造函数的引用。该属性可用于检查对象是否为Date类型。 下面是使用Date对象的constructor属性的示例: var da…

    JavaScript 2023年5月11日
    00
  • BootStrap Validator使用注意事项(必看篇)

    BootStrap Validator使用注意事项(必看篇) 作为一个前端开发者,你可能会经常使用Bootstrap框架来开发网站。其中,Bootstrap Validator是Bootstrap框架中一个非常有用的jQuery插件,可以用于表单验证。在使用Bootstrap Validator时,需要注意以下事项: 1. 引用依赖文件 在使用Bootstr…

    JavaScript 2023年6月10日
    00
  • js获取元素的偏移量offset简单方法(必看)

    下面是关于“js获取元素的偏移量offset简单方法(必看)”完整攻略的讲解。 什么是偏移量? 元素的偏移量(offset)就是指该元素相对于其定位父级元素的左上角的位置。通常我们用left和top来表示。 为什么需要获取元素的偏移量? 在页面中,我们经常需要进行元素位置的计算,比如动态计算元素的位置,比如实现元素拖拽等等。这些操作都会用到元素的偏移量。 使…

    JavaScript 2023年6月11日
    00
  • js正则函数match、exec、test、search、replace、split使用介绍集合

    Js正则函数match、exec、test、search、replace、split使用介绍集合 正则表达式是一种能够从文本中匹配出我们需要的信息的工具,同时在JavaScript中也提供了多个正则函数可以操作正则表达式,包括match()、exec()、test()、search()、replace()和split()。 match() match()函数…

    JavaScript 2023年6月10日
    00
  • 如何使JavaScript休眠或等待

    当JavaScript需要在一定时间内暂停执行或等待某些操作完成后再执行下一步操作时,可以使用JavaScript的休眠或等待实现方式。以下是具体的实现过程: 1.使用setTimeout函数实现休眠 使用setTimeout函数可以在指定的时间后执行指定的JavaScript代码,于是,在需要休眠一段时间后再执行代码的时候,可以将要执行的代码以回调函数的形…

    JavaScript 2023年5月27日
    00
  • JavaScript数据类型相关知识详解

    JavaScript数据类型相关知识详解 在JavaScript中,数据类型可以分为基本数据类型和复杂数据类型。本篇攻略将详细讲解每种数据类型和其相关知识点。 基本数据类型 Number JavaScript中的Number类型可以表示整数和浮点数。在JavaScript中,Number类型可以进行四则运算和比较运算。 整数 JavaScript中的整数范围…

    JavaScript 2023年5月18日
    00
  • 浅析JavaScript中两种类型的全局对象/函数

    1. 全局对象/函数的概念 JavaScript中有两种类型的全局对象/函数:Global对象和全局函数。它们都可以在任意JavaScript代码中访问,因为它们被加载到了全局执行环境中。 Global对象 Global对象是JavaScript中的特殊对象,它包含了所有全局变量、全局函数和内置对象,例如:Number、String、Math等。 在浏览器中…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部