理解javascript中DOM事件

yizhihongxing

理解JavaScript中DOM事件的完整攻略

DOM处理事件的机制是基于事件传播(Event propagation)的,事件传播是指从页面最外层开始逐级向内层传递事件的过程。而JavaScript为开发者提供了两种方式来实现事件处理:事件监听器和事件委托。

事件监听器

事件监听器是在事件触发时执行的代码块,可以使用addEventListener方法添加到HTML元素上。addEventListener期望接收两个参数,第一个参数是事件的名称,第二个参数是事件触发时需要执行的函数,如下图所示:

let button = document.querySelector('#button')
button.addEventListener('click', function() {
  console.log('Hello World')
})

在上面的代码中,我们为一个button元素添加了一个click事件监听器。当用户点击button按钮时,将会触发这个事件监听器,然后执行内部的函数。

除此之外,addEventListener还有第三个参数。这个参数是一个boolean值,通常被称为useCapture。它决定了事件按照捕获还是冒泡的方式处理,默认值为false,即采用冒泡传播方式。如果设置为true,则会使用捕获传播方式。

let parent = document.querySelector('#parent')
let child = document.querySelector('#child')

parent.addEventListener('click', function() {
  console.log('parent clicked')
}, true)

child.addEventListener('click', function() {
  console.log('child clicked')
}, true)

在这个例子中,我们为parent元素和child元素都添加了一个click事件监听器,并使用了捕获传播方式。因此当点击child元素时,会按照以下顺序执行两个函数:

  1. parent的监听器函数
  2. child的监听器函数

事件委托

事件委托允许我们使用父元素来捕捉子元素上的事件。在这种情况下,监听器会被绑定到父元素身上,然后通过事件冒泡的方式来检查是否实际发生在了子元素上。这种方式可以有效地避免添加过多事件监听器的问题,从而提高了性能。

<ul>
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
  <li>Item 4</li>
  <li>Item 5</li>
</ul>

现在,我们为整个ul元素添加一个click事件监听器,而不是为每个li元素添加一个:

let ul = document.querySelector('ul')
ul.addEventListener('click', function(event) {
  console.log(event.target.innerHTML)
})

在监听器中,我们使用了事件对象(event),并输出了用户点击的子元素的文本内容。

示例

假设我们有以下HTML代码:

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

我们可以用以下代码为inner元素添加一个点击事件监听器:

let inner = document.querySelector('#inner')
inner.addEventListener('click', function(event) {
  console.log('Inner element clicked!')
})

我们还可以使用事件委托来完成同样的任务,如下所示:

let outer = document.querySelector('#outer')
outer.addEventListener('click', function(event) {
  if (event.target.id === 'inner') {
    console.log('Inner element clicked!')
  }
})

在这个例子中,我们为outer元素添加了一个click事件监听器,并检查事件发生的目标元素是否是inner元素。如果是,那么就执行我们的函数。

let list = document.querySelector('ul')
list.addEventListener('click', function(event) {
  if (event.target.nodeName === 'LI') {
    console.log('List item clicked!')
  }
})

在这个例子中,我们为ul元素添加了一个click事件监听器,并检查点击的目标元素是否是LI元素。如果是,就执行我们的函数。

结论

DOM事件是Web开发中非常重要的一部分,因为事件是Web页面的核心交互方式。我们需要深入了解事件传播的机制,以及如何使用事件监听器和事件委托来管理事件,并提高性能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:理解javascript中DOM事件 - Python技术站

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

相关文章

  • Javascript Global parseFloat() 函数

    JavaScript Global对象中的parseFloat()函数用于将一个字符串解析为浮点数。如果该字符串无法解析为浮点数,则返回NaN。以下是关于parseFloat()函数完整攻略,包括两个示例说明。 JavaScript Global对象中的parseFloat()函数 JavaScript Global对象中的parseFloat()函数用于将…

    JavaScript 2023年5月11日
    00
  • JAVA使用Gson解析json数据实例解析

    简介 JSON是一种轻量级的数据交换格式,很多时候我们需要在Java中使用JSON格式进行数据的传递或解析,在Java中使用Gson库可以方便地实现JSON的解析和生成。 Gson是Google提供的Java解析JSON的库,它可以将JSON字符串转化为Java对象,也可以将Java对象转化为JSON字符串。 基本概念 在使用Gson进行JSON解析时,需要…

    JavaScript 2023年6月11日
    00
  • 基于JS实现将JSON数据转换为TypeScript类型声明的工具

    若想基于JS实现将JSON数据转换为TypeScript类型声明的工具,可以参照以下攻略: 第一步:安装必需的npm包 在控制台输入以下代码: npm install -g json-to-ts 第二步:使用json-to-ts包来生成TypeScript类型声明 生成TypeScript类型声明命令为: json-to-ts filename.json 其…

    JavaScript 2023年5月27日
    00
  • CocosCreator入门教程之用TS制作第一个游戏

    Cocos Creator是一个非常优秀的游戏开发引擎,支持多平台的游戏开发。本文将介绍如何使用Cocos Creator和TypeScript(TS)来创建第一个简单的游戏。 准备工作 在开始之前,需要做以下准备工作: 下载安装Cocos Creator:可以在Cocos官网上下载对应的版本,根据自己的实际情况选择对应的操作系统和版本号。 安装好之后,打开…

    JavaScript 2023年6月10日
    00
  • js 数组详细操作方法及解析合集

    JS 数组详细操作方法及解析合集 什么是数组? 在JavaScript中,数组是一种存储多个值的有序集合。数组中的每个值称为一个元素,每个元素都有一个相应的数字键(称为索引)来标识其在数组中的位置。 创建数组 在JavaScript中,有多种方式来创建数组。下面是一些示例: 使用数组字面量 数组字面量是用方括号 [] 包围并由逗号分隔构成的值序列,如下所示:…

    JavaScript 2023年5月18日
    00
  • 一个cssQuery对象 javascript脚本实现代码

    讲解一个 CSS 查询对象 JavaScript 实现代码的攻略需要考虑以下几个方面:1. CSS 选择器语法的基础知识;2. JavaScript 对 DOM 操作的基础掌握;3. 将 CSS 选择器语法和 JavaScript DOM 操作结合起来。 下面是实现一个 CSS 查询对象的攻略: CSS 选择器语法基础 在 CSS 选择器语法中,我们可以使用…

    JavaScript 2023年5月27日
    00
  • JS获取一个表单字段中多条数据并转化为json格式

    要获取一个表单字段中多条数据并转化为JSON格式,可以按如下步骤进行: 获取表单字段的值 首先,需要获取表单字段的值。可以使用document.getElementsByName()方法来获取表单字段的所有值。 例如,表单中有一个名称为“fruit”的checkbox列表,它包含多个不同的水果,可以使用以下代码获取所选水果的值: var fruit = do…

    JavaScript 2023年5月27日
    00
  • JS语法也可以有C#的switch表达式

    当你在编写JavaScript时,你可能想使用一种类似于C#语言中switch语句的方式来处理条件分支。在ES2020中,引入了一个新的语法糖——switch表达式,它是对传统switch语句的升级版本,它可以以更简单的方式处理更复杂的逻辑判断。 switch语句 首先,我们来看一下普通的switch语句的例子。 let fruit = "appl…

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