原生JS如何利用冒泡减少事件的触发,只代理给共有的父元素。

2024-04-01 10:32

本文主要是介绍原生JS如何利用冒泡减少事件的触发,只代理给共有的父元素。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

相信很多人都知道事件代理这个方法,因为在JQuery里面,已经封装好了。

$(父元素).on('click','父元素下的子元素标签名',function(){...})

但是如果用原生JS来写呢?相信有部分都会懵逼了….因为我曾经也是懵逼的一员

elem.addEventListener(“事件名”,callback,false/true);
为elem元素的指定”事件”,绑定callback回调函数
第三个参数: 设置是否在捕获阶段触发

如果你绑定了一个事件名,类似’click’、’mouseover’….等等一些事件
例如,如果你给某个绑定了click事件,那么当你点击该元素时,首先会从document开始捕获,一直捕获到你点击的目标元素,然后按照捕获阶段反向的顺序,依次执行各级父元素上的事件处理函数

整理下来就是:
2个阶段:
1. 捕获:由外向内,依次记录各级元素绑定的事件处理函数
捕获阶段只到目标元素截止
2. 冒泡: 按照捕获阶段反向的顺序,依次执行各级父元素上的事件处理函数

下面是代码的栗子

<!DOCTYPE HTML>
<html><head><title>取消与利用冒泡</title><meta charset="utf-8"/><link rel="stylesheet" href="css/3.css"/></head><body><div id="keys"><button>1</button><button>2</button><button>3</button><button>4</button><br><button>C</button><button>+</button><button>-</button><button>=</button></div><textarea id="sc" style="resize:none;width:200px; height:50px;" readonly></textarea><script>//为id为keys的元素绑定单击事件为:keys.addEventListener("click",function(e){//获得目标元素,保存在target中var target=e.target;//如果target是buttonif(target.nodeName=="BUTTON"){//判断target的内容switch(target.innerHTML){case "C"://如果是C//清除id为sc的内容sc.value="";break;case "="://如果是=try{//错误处理//将id为sc的内容,放入eval中,将结果再保存回id为sc的内容中sc.value=eval(sc.value)}catch(err){//一旦出错//将错误对象转为字符串,放入id为sc的内容中sc.value=String(err);}break;default://其他//将target的内容追加到id为sc的内容中sc.value+=target.innerHTML;}}});</script><a id="a1" href="#">click me</a></body>
</html>

其实冒泡也可以取消。
取消冒泡: 执行完当前元素的事件处理函数后,阻止冒泡向上执行。
e.stopPropagation();

这篇关于原生JS如何利用冒泡减少事件的触发,只代理给共有的父元素。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/866930

相关文章

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

禁止平板,iPad长按弹出默认菜单事件

通过监控按下抬起时间差来禁止弹出事件,把以下代码写在要禁止的页面的页面加载事件里面即可     var date;document.addEventListener('touchstart', event => {date = new Date().getTime();});document.addEventListener('touchend', event => {if (new

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

EasyPlayer.js网页H5 Web js播放器能力合集

最近遇到一个需求,要求做一款播放器,发现能力上跟EasyPlayer.js基本一致,满足要求: 需求 功性能 分类 需求描述 功能 预览 分屏模式 单分屏(单屏/全屏) 多分屏(2*2) 多分屏(3*3) 多分屏(4*4) 播放控制 播放(单个或全部) 暂停(暂停时展示最后一帧画面) 停止(单个或全部) 声音控制(开关/音量调节) 主辅码流切换 辅助功能 屏

遮罩,在指定元素上进行遮罩

废话不多说,直接上代码: ps:依赖 jquer.js 1.首先,定义一个 Overlay.js  代码如下: /*遮罩 Overlay js 对象*/function Overlay(options){//{targetId:'',viewHtml:'',viewWidth:'',viewHeight:''}try{this.state=false;//遮罩状态 true 激活,f

使用JS/Jquery获得父窗口的几个方法(笔记)

<pre name="code" class="javascript">取父窗口的元素方法:$(selector, window.parent.document);那么你取父窗口的父窗口的元素就可以用:$(selector, window.parent.parent.document);如题: $(selector, window.top.document);//获得顶级窗口里面的元素 $(

js异步提交form表单的解决方案

1.定义异步提交表单的方法 (通用方法) /*** 异步提交form表单* @param options {form:form表单元素,success:执行成功后处理函数}* <span style="color:#ff0000;"><strong>@注意 后台接收参数要解码否则中文会导致乱码 如:URLDecoder.decode(param,"UTF-8")</strong></span>