JavaScript 事件冒泡简介及应用

yizhihongxing

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日

相关文章

  • JS实现的哈夫曼编码示例【原始版与修改版】

    下面我将详细讲解一下“JS实现的哈夫曼编码示例【原始版与修改版】”的完整攻略,包含了两个示例。 哈夫曼编码简介 哈夫曼编码也叫霍夫曼编码,是一种基于变长编码的编码方式。它采用前缀编码的方式,即每个字符的编码都不是其他字符编码的前缀,保证解码的唯一性。哈夫曼编码常被用于数据的压缩和传输,例如常见的压缩文件格式gzip、zip等,以及在网络通信中的数据传输。 原…

    JavaScript 2023年5月19日
    00
  • JavaScript getter setter金字塔​​​​​​​

    JavaScript getter setter金字塔是一个针对JavaScript对象的编程技巧,用于在对象中定义getter和setter方法,这些方法可以设置和获取对象的属性值。这个技巧的特点是将getter和setter方法嵌套在一起,形成一个金字塔状的结构,以实现对对象属性的高度定制和控制。 以下是完整的JavaScript getter sett…

    JavaScript 2023年5月28日
    00
  • JavaScript面试必备之垃圾回收机制和内存泄漏详解

    JavaScript面试必备之垃圾回收机制和内存泄漏详解 什么是垃圾回收机制 JavaScript是一种解释型语言,内存的管理是由垃圾回收机制自动进行的。垃圾回收机制是通过检测内存中不再使用的变量,然后释放内存空间,以供下一次使用。 JavaScript中的垃圾回收机制 JavaScript的垃圾回收机制采用的是自动垃圾回收(Automatic Garbag…

    JavaScript 2023年6月10日
    00
  • 百度移动版的url编码解码示例

    下面是关于“百度移动版的URL编码解码示例”的完整攻略。 什么是URL编码/解码? URL编码(也叫百分号编码)是一种将 URL 中的特殊字符转换成 ASCII 码表示的方法。这是为了让 URL 不受特殊字符的干扰,从而在网络上正确地传输。而URL解码则是将已经转换为ASCII码的URL字符,转换回原本的字符。 百度移动版的URL编码/解码示例 百度移动版的…

    JavaScript 2023年5月19日
    00
  • 详解JSON和JSONP劫持以及解决方法

    下面是详解JSON和JSONP劫持及解决方法的攻略。 什么是JSON和JSONP JSON JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,其格式简单明了,易于阅读和编写,同时也易于机器解析和生成。JSON是一种完全独立于编程语言的数据格式,它的性能优越,能够处理庞大的数据量。 JSON数据格式示例: { &q…

    JavaScript 2023年5月27日
    00
  • js下用eval生成JSON对象

    使用eval函数可以将字符串转换为JavaScript代码执行,因此可以使用eval生成JSON对象。以下是生成JSON对象的完整攻略: 1. 准备JSON字符串 首先,你需要准备一个字符串表示的JSON数据。这个JSON字符串必须遵循JSON语法规范,且必须被引号包裹。下面是一个示例JSON字符串: var jsonStr = ‘{"name&q…

    JavaScript 2023年5月27日
    00
  • javaScript日期工具类DateUtils详解

    JavaScritp日期工具类DateUtils详解 概述 JavaScript是一种广泛使用的动态编程语言,该语言可以用于浏览器和Node.js环境。在使用JavaScript开发web应用程序的过程中,日期处理是一个很常见和常用的功能。JavaScript内置有Date对象,而DateUtils是一种自定义的日期工具类,它提供了一系列有用的日期处理函数。…

    JavaScript 2023年5月27日
    00
  • WEB 浏览器兼容 推荐收藏

    下面是关于WEB浏览器兼容推荐收藏的完整攻略。 什么是WEB 浏览器兼容? WEB浏览器兼容是指一种 WEB 站点可被多种浏览器在不同操作系统环境下展现,且表现基本一致的能力。WEB的兼容性是 WEB 应用开发中最为重要的成果之一,无论是在美观还是用户体验上都占据重要地位。 为什么需要WEB 浏览器兼容? 随着不同操作系统和不同版本的浏览器的出现,WEB 在…

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