理解javascript中DOM事件

理解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日

相关文章

  • 详解vue的双向绑定原理及实现

    关于《详解vue的双向绑定原理及实现》的攻略,我们可以分为以下几个部分进行讲解: 一、什么是双向绑定?为何要使用双向绑定? 双向绑定 Vue.js 中的双向绑定是将数据与视图进行双向绑定。在数据发生变化时,视图会自动更新并显示最新的状态;而在用户交互改变视图的值时,数据也会自动更新。 使用双向绑定的好处 使用双向绑定可以使我们写的代码更加简洁明了,减少了大量…

    JavaScript 2023年6月11日
    00
  • 简单封装js的dom查询实例代码

    下面开始讲解“简单封装js的dom查询实例代码”的攻略。 1. 理解DOM及其相关API 在开始封装DOM查询代码之前,首先需要对DOM及其相关API有一定的了解。请参考以下内容: 1.1 DOM是什么? DOM是文档对象模型(Document Object Model)的缩写,是一种用于访问和操作HTML和XML文档的编程接口。DOM将文档作为由节点(包括…

    JavaScript 2023年6月10日
    00
  • JavaScript数据类型的存储方法详解

    JavaScript数据类型的存储方法详解 1. JavaScript数据类型简介 在JavaScript中,共有以下七种数据类型: 原始类型:Number、String、Boolean、null、undefined、Symbol 引用类型:Object 2. 数据类型的存储方式 2.1 原始类型的存储方式 原始类型的数据直接存储在栈内存中,它们的值可以直接…

    JavaScript 2023年6月11日
    00
  • 通过js获取上传的图片信息(临时保存路径,名称,大小)然后通过ajax传递给后端的方法

    获取上传的图片信息并通过ajax传递给后端,可以分为以下几个步骤: 添加文件选择控件 在HTML页面中,添加一个文件选择控件,让用户可以选择要上传的图片文件。示例代码如下: <input type="file" id="file-input"> 监听文件选择事件 使用JavaScript监听文件选择控件的c…

    JavaScript 2023年6月11日
    00
  • 深入浅出JS的Object.defineProperty()

    深入浅出JS的Object.defineProperty() Object.defineProperty() 是JavaScript中一个非常重要的定义对象属性的 API。使用 Object.defineProperty() 可以定义对象属性的操作,比如,属性的可枚举性、可配置性、可读写性值等。在深入了解这个API之前,需要知晓一些基础的概念和属性设置,下面…

    JavaScript 2023年5月28日
    00
  • JavaScript中一些特殊的字符运算

    下面是关于“JavaScript中一些特殊的字符运算”的完整攻略。 前言 在JavaScript中,一些特殊的字符可以进行运算,这些运算可以实现很多有趣的功能,但也需要我们仔细地了解它们的使用方法。本文将详细讲解这些特殊字符在JavaScript中的使用方法,并给出两条示例说明。 章节 1. 逗号运算符(,) 逗号运算符可以用于将多个表达式连接在一起,并且最…

    JavaScript 2023年5月28日
    00
  • JavaScript 网页中实现一个计算当年还剩多少时间的倒数计时程序

    实现一个计算当年还剩多少时间的倒计时程序可以用 JavaScript 实现。下面是完整的攻略: 步骤 第一步:获取当前的时间 可以使用 Date() 函数获取当前时间。要获取到当前的年份,可以使用 getFullYear() 方法,获取到当前的月份,可以使用 getMonth() 方法(注意获取到的月份是从0开始计数的,需要加1),获取到当前的日期,可以使用…

    JavaScript 2023年5月27日
    00
  • jQuery学习笔记之Ajax用法实例详解

    当你需要从服务器异步获取数据、并且能够在不刷新页面的情况下动态更新网页内容时,Ajax是一种非常有用的技术。jQuery中的Ajax封装简单易用,本篇文章将详细讲解jQuery的Ajax用法。 Ajax简介 Ajax即”Asynchronous JavaScript and XML”(异步JavaScript和XML),是一种用于创建快速动态网页的技术。通过…

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