js事件监听机制(事件捕获)总结

JS事件监听机制(事件捕获)总结

什么是事件监听机制?

JavaScript事件监听机制是指浏览器在特定条件下,允许开发者在特定的DOM元素上注册回调函数,以便在特定的事件发生时进行响应。

事件类型

目前常见的事件类型可以分为以下三类:

  1. 用户交互事件:click、mousedown、mouseover等;
  2. 浏览器事件:load、resize、error等;
  3. 表单元素事件:submit、change等。

事件监听的两种方式

  1. 冒泡事件监听方式
  2. 捕获事件监听方式

冒泡事件监听方式

冒泡事件监听方式是指事件发生时,浏览器会首先执行最底层的元素上的回调函数,然后逐级向上执行,直到执行到最上层元素上的回调函数。该方式比较常见,也是浏览器默认的事件监听方式。

示例代码:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>冒泡事件监听方式示例</title>
</head>
<body>
  <div id="parent">
    <div id="child">
      Click me!
    </div>
  </div>
  <script>
    const parent = document.querySelector('#parent');
    const child = document.querySelector('#child');
    parent.addEventListener('click', (event) => {
      console.log('Clicked parent!');
    });
    child.addEventListener('click', (event) => {
      console.log('Clicked child!');
    });
  </script>
</body>
</html>

在上述代码中,当点击child元素时,控制台会输出两次Clicked child!,以及一次Clicked parent!。

捕获事件监听方式

捕获事件监听方式与冒泡事件监听方式相反,即在事件发生时,浏览器会首先执行最上层元素上的回调函数,然后逐级向下执行,直到执行到最底层元素上的回调函数。

示例代码:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>捕获事件监听方式示例</title>
</head>
<body>
  <div id="parent">
    <div id="child">
      Click me!
    </div>
  </div>
  <script>
    const parent = document.querySelector('#parent');
    const child = document.querySelector('#child');
    parent.addEventListener('click', (event) => {
      console.log('Clicked parent!');
    }, true); // 将捕获事件监听方式设为true
    child.addEventListener('click', (event) => {
      console.log('Clicked child!');
    }, true); // 将捕获事件监听方式设为true
  </script>
</body>
</html>

在上述代码中,当点击child元素时,控制台会输出一次Clicked parent!,以及两次Clicked child!。

捕获事件监听和冒泡事件监听的选择

在绝大多数情况下,冒泡事件监听方式可以满足网站开发的需求。但是,对于某些特殊的场景来说,我们需要使用捕获事件监听方式。

在某些场景下,冒泡事件监听可能会导致问题,例如:

  1. 父元素和子元素都添加了click事件监听,当子元素被点击时,会逐级冒泡触发父元素的click事件,从而多次触发点击事件。如果在每个父元素上添加“不再向上冒泡”(stopPropagation)方法的调用,则显得比较麻烦。
  2. 对于一些需要动态增删元素的网站来说,如果不小心在每个元素上都添加了click事件监听,那么会导致性能降低,以及冒泡次数过多,增加代码编写和维护的难度。

当然,在使用捕获事件监听方式时,需要注意以下两点:

  1. 所有浏览器都不支持focusin和focusout事件的冒泡,需要使用捕获事件监听方式。
  2. 除了IE9之前的版本,其他浏览器都可以使用addEventListener方法来注册捕获事件监听。

总结

JavaScript事件监听机制是一种灵活且有效的前端技术,可以帮助我们轻松实现网页上的交互功能。至于使用捕获事件监听还是冒泡事件监听,则需要根据具体的需求来进行选择,不能一概而论。

参考资料

  1. MDN:EventTarget.addEventListener()
  2. MDN: Event bubbling and capturing

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js事件监听机制(事件捕获)总结 - Python技术站

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

相关文章

  • Javascript 面向对象 对象(Object)

    下面是 Javascript 面向对象 对象(Object)的完整攻略: 理解概念 JavaScript 的面向对象和其他语言很相似,都是基于类和实例的概念。但是 JavaScript 中没有类,而是通过对象来实现面向对象编程。 对象可以看作是一个属性的集合,每个属性都是由键值对(key-value pair)组成,键名是字符串,键值可以是任意的 JavaS…

    JavaScript 2023年5月27日
    00
  • checkbox勾选判断代码分析

    针对“checkbox勾选判断代码分析”,我会从以下几个方面进行详细讲解: checkbox的勾选状态判断 checkbox的点击事件绑定 checkbox状态改变时的处理逻辑 checkbox的勾选状态判断 在HTML中,可以通过以下代码创建一个checkbox: <input type="checkbox" id="m…

    JavaScript 2023年6月11日
    00
  • JavaScript基于扩展String实现替换字符串中index处字符的方法

    要基于扩展String实现替换字符串中index处字符的方法,需要使用JavaScript原型链进行扩展。具体步骤如下: 利用Object.defineProperty()方法,为String.prototype对象添加一个名为replaceCharAtIndex的新属性。 Object.defineProperty(String.prototype, ‘r…

    JavaScript 2023年5月28日
    00
  • javascript 解决浏览器不支持的问题

    一、什么是浏览器不支持问题? 浏览器不支持问题是指在一些老旧的浏览器中无法解析某些新的 JavaScript(或其他语言)特性,导致网站不能正确工作或加载。 二、如何解决浏览器不支持问题? 特性检测 特性检测是一种在运行时检测特定功能是否浏览器所支持的技术,这种技术可以保证即使在运行时检测到浏览器不支持某些特定的特性也不会使 JavaScript 报错,从而…

    JavaScript 2023年5月28日
    00
  • javascript中clone对象详解

    Javascript中Clone对象详解 在Javascript中,有时候我们需要对一个对象进行复制或者克隆,这个时候我们可以使用对象的clone方法来实现。本文将详细介绍如何使用Javascript中的clone方法来进行对象的克隆和复制。 常见的Javascript对象clone方法 在Javascript中,通常我们可以使用以下三种方式来进行对象的克隆…

    JavaScript 2023年5月27日
    00
  • JavaScript Promise与async/await作用详细讲解

    JavaScript Promise与async/await作用详细讲解 Promise的概念及作用 Promise是ES6引入的一种异步编程的解决方案。Promise可以看作是一种容器,里面保存着一个异步操作的结果。Promise对象有三种状态:Pending(进行中)、Fulfilled(已成功)和Rejected(已失败)。当Promise对象的状态从…

    JavaScript 2023年5月28日
    00
  • javascript实现原生ajax的几种方法介绍

    针对“javascript实现原生ajax的几种方法介绍”,以下是完整的攻略,共分为四个部分:介绍、XMLHttpRequest方法、fetch方法和示例说明。 介绍 AJAX是异步JavaScript和XML(Asynchronous JavaScript and XML)的缩写,是一种在无需重新加载整个页面的情况下向服务器发送请求的技术。原生AJAX(也…

    JavaScript 2023年6月11日
    00
  • 几个比较实用的JavaScript 测试及效验工具

    接下来我将向你介绍几个比较实用的 JavaScript 测试及效验工具,包括单元测试工具 Jest、代码质量工具 ESLint、以及文档生成工具 JSDoc,并且会附上相应的示例说明。 Jest:JavaScript 测试框架 Jest 是由 Facebook 开发推出的一款 JavaScript 测试框架,它可以用于执行单元测试、集成测试和端到端测试,可以…

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