js【详解】事件

给 DOM 节点绑定事件

推荐使用 addEventListener 函数

  • 第一个参数:事件名称
  • 第二个参数:事件处理函数(第一个参数为 event)
  • 第三个参数:
    • true 采用捕获法来处理事件
    • false 【推荐】采用冒泡法来处理事件
let div1= document.getElementById('div1');
div1.addEventListener('click', function(event){alert('div1_clicked!');
}, false);

event 参数的用途

  • event.target 获取触发事件的元素

  • event.preventDefault() 阻止默认行为

    默认行为如:a标签点击跳转、鼠标右键弹出菜单、滑动滚轮控制滚动条等

  • event.stopPropagation() 阻止事件传播(冒泡/捕获)

事件流(含事件冒泡,事件捕获)

https://blog.csdn.net/weixin_41192489/article/details/133140101

【必考】事件代理

借助其他元素来响应自身事件即事件代理。

应用范例:对于内容很多的列表,为了避免给每一个列表中的元素都绑定一个点击事件,仅在列表的容器元素上绑定点击事件,则当点击列表中的元素时,因事件冒泡机制,会触发容器元素的点击事件,再在该事件中,识别出点击的具体元素,并执行相应的处理。

// 列表内容很多的容器
const div3 = document.getElementById("div3");// 点击列表中a标签的元素时,弹窗显示其内容
div3.addEventListener("click", (event) => {event.preventDefault();let target = event.target;if (target.nodeName === "A") {alert(target.innerHTML);}
});

【考题】写一个通用的事件绑定函数

/*** 通用的事件绑定函数(支持事件代理)* @param {*} elem      触发事件的元素* @param {*} type      事件类型* @param {*} selector  选择器* @param {*} fn        事件处理函数*/
function bindEvent(elem, type, selector, fn) {//若只传入了三个参数(即普通的事件绑定),则第三个参数才是事件处理函数if (fn == null) {// 将第三个参数设置为事件处理函数fn = selector;// 将选择器置空selector = null;}// 绑定事件elem.addEventListener(type, (event) => {// 获取触发事件的元素const target = event.target;if (selector) {// 传入了选择器,则为事件代理绑定if (target.matches(selector)) {// 若触发事件的元素与选择器匹配,则执行事件处理函数fn.call(target, event); // 利用 call 改变事件处理函数中 this 的指向}} else {// 没有选择器,为普通事件绑定fn.call(target, event);}});
}

使用

// 普通事件绑定
const btn1 = document.getElementById('btn1')
bindEvent(btn1, 'click', function (event) {event.preventDefault()alert(this.innerHTML)
})// 事件代理绑定
const div3 = document.getElementById('div3')
bindEvent(div3, 'click', 'a', function (event) {event.preventDefault()alert(this.innerHTML)
})

【考题】描述事件冒泡的流程

事件基于 DOM 树形结构顺着触发元素不断向上传播(由内层节点传播到外层节点),触发各级父辈节点对应的事件,若父辈节点中没有阻断事件的冒泡传播,则会一直传播到window 对象。

应用场景:事件代理(参考上文)

【考题】无限下拉图片列表,如何监听每个图片的点击

通过事件代理实现,具体逻辑如下:

  • 在列表容器上绑定点击事件
  • 点击图片时,会冒泡触发列表容器的点击事件
  • 通过 e.target 获取到触发元素
  • 通过 matches 判断触发元素是否是图片
  • 是图片,则执行相应的代码,不是图片则不执行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/738294.shtml

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

相关文章

React Fiber的原理

React Fiber是React 16及更高版本中引入的一种新的核心算法,它作为React内部调度机制的重构部分,对原有的Reconciliation(协调)过程进行了升级。Fiber架构的目标是提高React在复杂应用中的性能和可预测性,并支持异步渲…

排序类算法

目录 一、交换类排序 1.冒泡排序 2.快速排序 二、 插入排序 1.直接插入排序 2.折半插入排序 3.希尔排序 三、选择排序 1.简单选择排序 2.堆排序 完整代码 四、归并排序 完整代码 五、汇总 六、OJ练习 1.冒泡排序:正确表示前一个数和后一个数 2.选…

LLM推理框架Triton Inference Server学习笔记(一): Triton Inference Server整体架构初识

官方文档查阅: TritonInferenceServer文档 1. 写在前面 这篇文章开始进行大语言模型(Large Language Model, LLM)的学习笔记整理,这次想从Triton Inference Server框架开始,因为最近工作上用到了一些大模型部署方面的知识, 所以就快速补充了…

【STM32】串口助手接受数据是乱码如何解决

第一步 首先判断自己使用的串口助手和工程配置的波特率是否相同,一般都是115200 第二步 如果不是上一条的问题,继续排查,检查时钟问题 打开工程,找到此文件(stm32f10x.h)的这个位置,如工程中未添加,可以从…

centos安装hadoop启动问题解决方案

1、出现了问题localhost: ERROR: JAVA_HOME is not set and could not be found. *解决方案尝试: 修改hadoop-env.sh(在etc/hadoop) sudo gedit /usr/local/hadoop/etc/hadoop/hadoop-env.sh 将原本的JAVA_HOME 替换为绝对路径就可以了 #expo…

solana 入门 1

solana-co-learn Solana 开发学习笔记(一)——从 Hello World 出发 列出可用的分发版 安装开发环境 windows下环境配置 wsl wsl --install wsl wsl.exe --list --online显示: 以下是可安装的有效分发的列表。 使用 ‘wsl.exe --install ’ 安装。 NAME FRIENDLY…

Leetcode 144. 二叉树的前序遍历

题目描述:给定一个二叉树的根节点 root ,返回 它的 前序 遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[1,3,2] 示例 2: 输入:root [] 输出:[] 示例 3: 输入&…

关于C语言调用Python,PyImport_ImportModule函数的简介

函数原型:PyObject *PyImport_ImportModule(const char *name) 用于加载编译目标的文件 这个模块必须为.py文件,因为说直白点就是通过Python3 xxxx.py能够通过编译的东西

项目管理【引论二】项目管理的逻辑

系列文章目录 【引论一】项目管理的意义 【引论二】项目管理的逻辑 一、项目管理的目标 项目管理的目标是在规定的时间内,在批准的预算内,完成事先确定的工作范围内的工作,并且达到预期的质量性能要求。 1.1 时间、成本和质量之间的关系 1…

力扣226.翻转二叉树(二叉树的先序遍历)

文章目录 题目描述思路复杂度Code 题目描述 思路 利用二叉树的先序遍历,每次递归遍历时将当前节点的左右子节点交换即可 复杂度 时间复杂度: O ( n ) O(n) O(n);其中 n n n为树节点的个数 空间复杂度: O ( h e i g h ) O(heigh) O(heigh);其…

嵌入式学习第二十七天!(TCP并发模型)

TCP并发模型: 1. TCP多线程模型: 缺点:创建线程会带来资源开销,能够实现的并发量比较有限。 2. IO模型: 1. 阻塞IO: 没有数据到来时,可以让任务挂起,节省CPU资源开销,提…

【el-cascader-plus亲测有限】el-cascader级联选择器懒加载+多选功能回显失败解决方案

背景:在业务逻辑中需要用到el-cascader级联选择器懒加载多选功能,在回显的过程中遇到了无法回显的情况,按网上方法排查了回显值格式等问题终究没有解决。 解决方案:使用el-cascader-plus进行实现级联选择器懒加载多选回显功能 第一…

案例分析篇01:软件架构设计考点架构风格及质量属性(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

专栏系列文章推荐: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12601310.html 【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例分析篇-…

【SpringCloud微服务实战01】Eureka 注册中心

前言 在 Eureka 架构中,微服务角色有两类: EurekaServer :服务端,注册中心 记录服务信息 心跳监控 EurekaClient :客户端 Provider :服务提供者,例如案例中的 user-service 注册自己的信息到 EurekaS…

解决vue项目,运行npm install安装报缺少c++库问题

项目是前后端分离架构,前端使用的是vue框架,在部署前端项目时,需要下载安装一些基础的镜像配置,包括一些预处理,但是在使用npm install和yarn install命令时出现了如下错误,查阅资料总结如下: …

WPF(2)命令绑定

效果是&#xff1a;当TextBox控件的Text属性为空时show按钮不可用&#xff0c;有值时show按钮可用 项目结构 界面代码 <Window x:Class"WpfApp1.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://sc…

计算机网络规划与设计 -- 设计基础

文章目录 计算机网络规划与设计设计基础网络设计基本元素互联设备网关网络性能可用性、可靠性和可恢复性冗余度、适应性和可伸缩性效率与费用文档网络开发过程 计算机网络规划与设计 设计基础 网络设计基本元素 计算机网络是有多种基本元素组合而成&#xff0c;常见的网络基…

C++从零开始(day47)——set,map学习使用

这是关于一个普通双非本科大一学生的C的学习记录贴 在此前&#xff0c;我学了一点点C语言还有简单的数据结构&#xff0c;如果有小伙伴想和我一起学习的&#xff0c;可以私信我交流分享学习资料 那么开启正题 今天分享的是关于set和map的知识点 1.关联式容器 在前面&#…

Flutter ios一键三连脚本

flutter运行ios时总得执行三个命令,中间还得等待&#xff0c;有没有脚本自动执行 ## ios 执行命令 - flutter clean - flutter pub get - cd ios - pod install有&#xff0c;项目根目录创建shell 文件夹&#xff0c;新建setup.sh setup.sh里面放如下代码 #!/bin/bash# ios …

ffmpeg解码和渲染理解

ffmpeg解码和渲染理解 ffmpeg视频解码步骤 FFmpeg 是一个功能强大的跨平台多媒体处理工具&#xff0c;包含了音视频编解码、封装/解封装、过滤器等功能。下面是一般情况下使用 FFmpeg 进行视频解码的步骤&#xff1a; 初始化 FFmpeg 库&#xff1a;首先需要初始化 FFmpeg 库&a…