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.mzph.cn/news/169912.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring6.x对调度和异步执行的注解支持

Spring为任务调度和异步方法执行提供注解支持。 1 启用Scheduling注解 要启用 Scheduled 和 Async &#xff0c;在 Configuration 类&#xff08;或者在启动类&#xff09;添加 EnableScheduling 和 EnableAsync&#xff0c;如下&#xff1a; Configuration EnableAsync Ena…

Nacos身份绕过漏洞复现(QVD-2023-6271)

Nacos身份绕过漏洞复现&#xff08;QVD-2023-6271&#xff09; 环境配置 该漏洞主要用了win10_JAVA的环境&#xff0c;参考网上已有的复现文章&#xff0c;使用jdk-11.0.2_windows-x64_bin.exe 由于2.2.0之后的nacos已将本漏洞修复&#xff0c;所以本次复现使用2.2.0的包 下…

使用CMake交叉编译Arm Linux程序

下载安装aarch64-linux-gnu-gcc arm交叉编译工具链 apt-get install aarch64-linux-gnu-gccapt-get install aarch64-linux-gnu-gcc创建编译目录构建makefle 注意&#xff0c;工具链文件的指定一定要紧跟cmake命令之后&#xff0c;不能放到 … 后面构建arm架构cmake mkdir arm…

力软vue前端开发:使用params跳转传参404问题解决

问题描述 this.$router.push({ name: page, query: { id: 001 } }) // 根据路由名称 query 的方式跳转传参 使用query传参时&#xff0c;参数会拼接在链接后&#xff0c;点击搜索条件链接参数也还在。用户需要重新进入搜索页面。 所以&#xff0c;使用nameparams进行传参。参…

【JavaEE】多线程 (1)

目录 1. 认识线程&#xff08;Thread&#xff09; 1) 线程是什么 2) 为啥要有线程 3) 进程和线程的区别 2.第⼀个多线程程序 3.多线程的其他创建方式 方法二:实现 Runnable 接⼝ 方法三:匿名内部类 方法四:实现Runable, 重写run, 匿名内部类 方法五:使用lambda表达式…

带你用uniapp从零开发一个仿小米商场_2.创建空白项目及公共样式引入

创建空白项目 打开uniapp 点击新建->项目 如下, 是编辑你项目的名字的地方是你项目存放地址,可以点击浏览器去文件管理里面选地址是模板选择,这里选择默认模板就好是一些其他选择比如uvue能让你项目在编译成软件时运行更快,unicloud能让你用js写后端,且直接就是云开发,g…

Selenium+Pytest自动化测试框架实战

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

Linux命令(132)之sshpass

linux命令之sshpass 1.sshpass介绍 linux命令sshpass是用来实现非交换的ssh操作 2.sshpass用法 sshpass [参数] command sshpass参数 参数说明-p指定明文密码 3.实例 3.1.sshpass安装 默认系统中没有sshpass命令&#xff0c;需要安装sshpass rpm包 命令&#xff1a; y…

量化交易:筹码理论的探索-筹码分布计算的实现

前言 很多朋友习惯了同花顺、大智慧等看盘软件&#xff0c;经常问到筹码分布如何计算。 说起来筹码分布的理论在庄股时代堪称是一个划时代产品&#xff0c;虽然历经level2数据、资金流统计、拆单算法与反拆单算法等新型技术的变革&#xff0c;庄股时代也逐渐淡出市场&#xf…

掌握3个Mock工具,轻松玩转单元测试

公司要求提升单元测试的质量&#xff0c;提高代码的分支覆盖率和行覆盖率&#xff0c;安排我研究单元测试&#xff0c;指定方案分享并在开发部普及开。 单元测试中的Mock的目的 Mock的主要目的是让单元测试Write Once, Run Everywhere. 即编写一次后&#xff0c;可以在任意时…

第十九章 解读利用pytorch可视化特征图以及卷积核参数(工具)

介绍一种可视化feaature maps以及kernel weights的方法 推荐可视化工具TensorBoard&#xff1a;可以查看整个计算图的数据流向&#xff0c;保存再训练过程中的损失信息&#xff0c;准确率信息等 学习视频&#xff1a; 使用pytorch查看中间层特征矩阵以及卷积核参数_哔哩哔哩…

Calling PeopleTools APIs 调用PeopleTools API

Calling PeopleTools APIs 调用PeopleTools API You can call all of the PeopleTools APIs from an Application Engine program. When using APIs, remember that: 您可以从应用程序引擎程序调用所有PeopleTools API。使用API时&#xff0c;请记住: All the PeopleTools …

【机器学习】算法性能评估常用指标总结

考虑一个二分问题&#xff0c;即将实例分成正类&#xff08;positive&#xff09;或负类&#xff08;negative&#xff09;。对一个二分问题来说&#xff0c;会出现四种情况。如果一个实例是正类并且也被 预测成正类&#xff0c;即为真正类&#xff08;True positive&#xff0…

计算两个经纬度之间的实际距离(Haversine公式)----c++

来源:https://www.open-open.com/lib/view/open1430573897802.html 原理亦可参考:https://blog.csdn.net/gaocuisheng/article/details/126060795 #include <cmath> #define EARTH_RADIUS 6371.0;// 地球半径&#xff0c;单位千米static double HaverSin(double theta…

文献速递:人工智能在新生儿重症监护室:现在是时候了

人工智能在新生儿重症监护室&#xff1a;现在是时候了 01 文献速递介绍 文章介绍了AI的多学科特性&#xff0c;包括计算机科学、数学、神经科学和哲学。AI的目标是通过各种计算和算法技术创建智能机器。尽管早期对人类水平AI的预测未能实现&#xff0c;但对AI的期待仍然强烈…

OpenGL 图元赋色(Qt)

文章目录 一、简介二、实现代码三、实现效果一、简介 这里同样对OpenGL中的顶点赋色相关功能进行封装,便于我们后续的使用,具体内容可以阅读代码。 二、实现代码 这里我们需要改造一下我们之前的Drawable基类,这样后续的所有图元都可以通过它来进行顶点赋色。 Drawable.h #i…

ubuntu20.04配置OpenCV的C++环境

ubuntu20.04配置OpenCV的C环境 这里以opencv-3.4.16为例 复现https://github.com/raulmur/ORB_SLAM2此项目&#xff0c;需安装opencv及其他依赖&#xff0c;可见README.md详情 1.下载opencv源代码 https://opencv.org/releases/ 2.下载OpenCV的扩展包opencv_contrib&#x…

python安装redis库

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

杂货铺 | Windows系统上解压缩tgz文件

文章目录 &#x1f4da;快速终端打开实现 & 解压缩实现步骤&#x1f4da;环境变量的一般配置步骤 & 问题解决思路 &#x1f4da;快速终端打开实现 & 解压缩实现步骤 将对应的tgz文件放入对应的文件夹。快速在指定文件夹下打开终端 打开对应的路径 双击地址栏 然后…

计算机视觉面试题-01

计算机视觉面试通常涉及广泛的主题&#xff0c;包括图像处理、深度学习、目标检测、特征提取、图像分类等。以下是一些可能在计算机视觉面试中遇到的常见问题&#xff1a; 图像处理和计算机视觉基础 图像是如何表示的&#xff1f; 图像在计算机中可以通过不同的表示方法&…