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日

相关文章

  • js正则表达式之replace函数用法

    JS正则表达式之replace函数用法 介绍 JavaScript中的正则表达式可以用于匹配和查找字符串中的特定文本,replace()是正则表达式重要的功能之一。该函数用于将字符串中的某些部分替换为新的文本内容。 语法 replace()函数的语法如下: str.replace(regexp|substr, newSubStr|function); 其中,…

    JavaScript 2023年6月10日
    00
  • js实现为a标签添加事件的方法(使用闭包循环)

    为 a 标签添加事件可以使用 JS来实现。其中最简单的方法就是通过给每个a标签添加 onclick 事件来实现。但是这种方式比较繁琐,尤其是当页面中大量的 a 标签时,维护起来会非常麻烦。因此我们可以使用闭包循环来为所有 a 标签添加事件。 以下是实现方式: 首先我们需要在 JS 文件中获取所有的 a 标签 const links = document.qu…

    JavaScript 2023年6月10日
    00
  • javascript Ajax获取远程url的返回判断

    Javascript Ajax获取远程Url的返回判断通常包括以下几个步骤: 1. 创建XMLHttpRequest对象 var request; if (window.XMLHttpRequest) { // 非IE浏览器 request = new XMLHttpRequest(); } else if (window.ActiveXObject) { …

    JavaScript 2023年6月11日
    00
  • Jupyter Notebook运行JavaScript的方法

    Jupyter Notebook 是一种交互式的笔记本,非常适合数据分析、数据可视化、教育和科学计算等任务。它支持多种编程语言和交互式的数据可视化,其中也包括 JavaScript。下面我将详细讲解如何在 Jupyter Notebook 中运行 JavaScript。 安装和启动 使用 Jupyter Notebook 运行 JavaScript,需要先在…

    JavaScript 2023年5月27日
    00
  • 如何使用VUE+faceApi.js实现摄像头拍摄人脸识别

    下面我将详细讲解如何使用Vue.js和face-api.js实现摄像头拍摄人脸识别的完整攻略。 1. 准备工作 在使用Vue.js和face-api.js进行开发前,我们需要确保已经准备好以下工作: Node.js和npm的安装; Vue.js的安装; face-api.js库的安装。 具体可以参考以下步骤: 1.1 安装Node.js和npm 可前往Nod…

    JavaScript 2023年6月11日
    00
  • javascript实现简单倒计时效果

    下面是“JavaScript实现简单倒计时效果”的完整攻略: 1. 准备工作 在实现倒计时之前,需要考虑几个方面:1. 计时器应该显示在页面的哪个位置2. 倒计时的目标时间是多少3. 如果倒计时结束之后需要执行什么操作所以我们可以准备一个包含倒计时的容器元素和需要倒计时到的时间的变量。 在HTML中定义计时器容器的元素: <div id="c…

    JavaScript 2023年5月27日
    00
  • javascript中日期转换成时间戳的小例子

    JavaScript的日期对象提供了各种操作日期和时间的方法。在JavaScript中将日期转换成时间戳(以毫秒为单位)非常简单,只需要用Date对象的getTime()方法即可。以下是用JavaScript将日期转换为时间戳的小例子: const date = new Date(‘2021-08-01’); const timeStamp = date.g…

    JavaScript 2023年5月27日
    00
  • javascript七大数据类型详解

    JavaScript 七大数据类型详解 引言 在 JavaScript 中,它支持七种基本的数据类型,这些数据类型分为两大类:原始类型和引用类型。了解这些数据类型对于你理解 JavaScript 中的数据存储和操作至关重要。在本篇文章中,我们将对这七种数据类型进行详细的解释以及举例说明。 原始数据类型 原始数据类型有五种,包括 undefined、null、…

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