当前位置: 首页 > article >正文

JS事件代理(事件委托)

JS事件代理(事件委托)

  • 前言
  • 什么是事件代理
    • 事件代理的优点
  • 事件代理实例
    • 代码实例:
  • 总结

前言

本文详细讲解JavaScript中关于事件代理技术相关的内容以及源码实例的讲解。那么好,本文正式开始

什么是事件代理

事件代理作为JavaScript中一种常用的技术,它主要价值是在于允许将子元素的事件处理程序绑定在父元素中,比如表格中的每一条数据对应表格就是子对父,而当我们想通过一个事件来绑定旗下所有条数据时,我们就可以通过调用table表格来实现这个功能,从而简化代码并且提高性能。

事件代理的优点

  • 简化代码:如果不用事件代理,则会创建更多的事件绑定在子元素中,会造成代码可复用性较差。而使用事件代理,实现监听效果,那么就可以智勇一个事件达到监听所有子元素,从而实现简化代码。
  • 动态增删子元素:比如动态添加一个子元素,我们不需要再为这个子元素添加新的事件,原有的事件委托事件就实现了监听。
  • 减少绑定事件数量:从N减少到了1.

事件代理实例

我们可以通过给父元素添加监听事件,然后可以利用子元素的特性,如tagName标签名,相同的class伪名等等来进行if判断,最后实现一个事件代理的功能。比如:
需求:想绑定id为father的所有标签名为span元素的事件,并且每点一次就打印一次点击了一个span

代码实例:

<!DOCTYPE html>
<html>
<head>
	<style>
		#father{
			width:1000px;
			height:500px;
			border:1px solid gray;
		}
		.son{
			display:inline-block;
			width:100px;
			height:100px;
			border:1px solid gray;
		}
	</style>
</head>
<body>
	<div id="father">
		<span class="son"></span>
		<span class="son"></span>
		<p>1</p>
	</div>
	<script>
		let father=document.getElementById('father')
		father.addEventListener('click',function(e){
			if(e.target.tagName.toLowerCase()=='span'){
				console.log('点击了一个span');
			}
		})
	</script>
</body>
</html>

那么我们首先定义了一个id为father的父元素div,并且在里面定义了两个span元素和一个p元素,最后在js代码中定义了father变量把id为father的DOM元素赋值过去,同时对father进行点击事件的监听,如果这个点击event事件的target目标对象的标签名的小写是span,那么就打印,否则就不打印,tagName就是标签名,toLowerCase()方法就是让获取到的所有字母都变成小写。最终实现了点击span元素打印,点击其他元素不打印的效果。

实现效果:
在这里插入图片描述

总结

事件代理是一种常用的JS技术,它可以大幅度的减少事件处理函数的数量,通过将这个事件代理程序绑定在父元素上,可以触发子元素想要的效果,从而实现简化代码以及事件处理程序。


http://www.kler.cn/a/154065.html

相关文章:

  • springboot上传下载文件
  • 极速入门数模电路
  • 在 Windows 11 中使用 MuMu 模拟器 12 国际版配置代理
  • jmeter常用配置元件介绍总结之配置元件
  • H.265流媒体播放器EasyPlayer.js视频流媒体播放器关于直播流播放完毕是否能监听到
  • 开源项目低代码表单设计器FcDesigner获取表单的层级结构与组件数据
  • react 字轮播滚动
  • 百度/抖音/小红书/微信搜索品牌形象优化怎么做?
  • Linux MIPI 调试中常见的问题
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • Qt_一个由单例引发的崩溃
  • Arkts开发UIAbility组件生命周期启动模式开发详解【鸿蒙专栏-19】
  • 工业机器视觉megauging(向光有光)使用说明书(五,轻量级的visionpro)
  • 【存储测试】fio存储性能测试工具
  • 流媒体方案之FFmepeg——实现物联网视频监控项目
  • 【【vivado ip 抽象成C语言的本质】】
  • 混合使用Windows和Linux子系统的工具和命令
  • 什么是勒索软件
  • 【音频】Glitch、降噪相关
  • redis单机版本安装
  • 【linux】信号——信号保存+信号处理
  • 【VMware相关】VMware vSphere存储方案
  • 我的2023年12月02日对文章发送的一个测试
  • selenium三猛士
  • 利用Python中的Manim进行数学绘画和创作
  • selenium 工具 的基本使用