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

相关文章

  • iOS瀑布流的简单实现(Swift)

    这里是“iOS瀑布流的简单实现(Swift)”的完整攻略。 一、前言 瀑布流是一种非常常见的UI布局方式,在iOS开发中也有很多应用。本文将介绍如何在Swift中实现一个简单的瀑布流布局。 二、实现思路 我们可以采用UICollectionView实现这个瀑布流布局,具体思路如下: 继承UICollectionViewFlowLayout,重写prepare…

    JavaScript 2023年6月11日
    00
  • Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例

    标题:Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例 本文介绍Python cookbook中关于针对任意多的分隔符拆分字符串的操作示例,涉及到字符串的分割、切片、正则表达式等多种方法。 示例一:使用字符串的split方法进行分割操作 在Python中,可以使用字符串的split方法对字符串进行分隔,拆分为指定分隔符的多个…

    JavaScript 2023年6月10日
    00
  • Javascript 面向对象 继承

    JavaScript 是一门面向对象的编程语言,因此在 JavaScript 中实现继承的方式和其他面向对象编程语言如 Java 和 Python 有些区别。下面是一个完整的 JavaScript 面向对象继承攻略,示例说明了两种常用的继承方式。 1. 构造函数继承 构造函数继承是通过在子类构造函数中调用父类构造函数来继承父类属性和方法,这种继承方式存在一个…

    JavaScript 2023年5月27日
    00
  • JavaScript 判断一个对象{}是否为空对象的简单方法

    判断 JavaScript 对象是否为空的简单方法有很多种,下面介绍两种常用的方法: 方法一:Object.keys() 如果对象没有属性,我们可以使用 Object.keys() 方法获取不到对象的属性名,从而判断对象是否为空。 具体操作如下: function isEmptyObject(obj) { return Object.keys(obj).le…

    JavaScript 2023年5月27日
    00
  • JavaScript ES6中export、import与export default的用法和区别

    当我们在用JavaScript编写模块化代码时,我们会经常用到export、import和export default等关键字。下面我们来介绍它们的用法及区别。 export export关键字用于将一个或多个模块内的变量、函数、类等暴露给外部使用。它通常被写在一个模块的底部,用法如下: // module.js export const name = ‘T…

    JavaScript 2023年5月28日
    00
  • 使用JavaScript实现按钮的涟漪效果实例代码

    让我为您详细讲解使用JavaScript实现按钮涟漪效果的攻略。 标题 在开始之前,我们需要了解这个效果的实现原理。当用户点击一个按钮时,会在按钮的中心产生一个白色圆形的涟漪效果,随着时间的推移,这个圆形会逐渐消失。 为了实现这个效果,我们需要在按钮被点击的时候在按钮中心产生一个白色圆形,并且不断对这个圆形进行缩小和透明度降低的处理,直到圆形消失。 那么,如…

    JavaScript 2023年6月11日
    00
  • 解决ie img标签内存泄漏的问题

    解决IE浏览器中img标签内存泄漏问题,需要遵循以下三个步骤: 1. 使用JavaScript动态创建img元素 在IE浏览器中,使用img标签将图片插入到HTML文档中时,需要先在浏览器缓存中将图片缓存下来,而当img被移除时,缓存并不会被自动清除,会导致内存泄漏。 来自IBM的一篇文章提出了使用JavaScript动态创建img元素的方案,可以避免该问题…

    JavaScript 2023年6月10日
    00
  • js中通过split函数分割字符串成数组小例子

    JS中通过split函数分割字符串成数组,可以帮助我们方便地对字符串进行处理,下面我们来讲解具体的攻略: 步骤1:理解split()函数 split函数是JS中字符串的一个函数,用来分割字符串,将字符串分割成一个数组。在分割字符串时,我们可以指定一个分隔符,如空格、逗号、分号等等。 步骤2:编写示例代码 下面通过两个代码示例来讲解,具体内容如下: 示例一:分…

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