JS中的事件委托

引子

其实事件委托就好比你找人帮你写寒假作业,因为寒假作业肯定有很多科嘛,咱就算是语数外三科,

第一种方式:你分别找三个人,一个人帮你写数学,一个帮你写语文,一个帮你写外语

第二种方式: 你找一个靠谱的人,他帮你找人,他帮你找三个人,每个人负责一科

其实就是把你想要干的事给委托出去了,只不过是把所有的事委托给了一个人而已,

1. 前期所需了解背景知识(事件捕获+冒泡阶段):

看上面的图,我分别给html标签,body标签,section标签,和里面的a标签都添加 click event后,会发现,当我点击 a标签的link后,给前面那些标签添加的事件竟然也都被触发了, 可是明明我只是点击了一个a标签的click 事件啊, 问题就在于浏览器对于事件的捕获背后存在着两个捕获阶段, 一个是先发生的从上到下的捕获叫【事件捕获】, 一个是从下到上的和之前逆序的【冒泡阶段】, 

如果你不确定是不是真的那个标签,可以在添加事件的时候,一并通过e.currentTarget 把当天的元素打印出来,就可以准确的判断了,

同时你也可以控制事件的触发,通过在添加事件的时候,传入第三个参数,true,来让事件处于捕获阶段; 默认不传第三个参数或者传参为false都是冒泡阶段

div.addEventListener("click", fn, true);

 

2. 不委托的例子:

就拿登录后的淘宝首页来举例子

登录后,右上角可以看到几个链接按钮,如果我们不进行事件委托,那么就需要给每个button单独创建一个页面跳转的事件,这里我假设每个button标签的属性里有我要的跳转网页地址等所需的所有信息,这时候,无论我给那个button添加事件,都是要获取标签里面的对应的属性值,然后进行相应的跳转操作,所以函数都是一样的,这时候就有多少个button,我就要重复几次,而这是无意义的,浪费内存,所以我们可以考虑事件委托,将事件绑定在他们的公共父亲元素比如header上,利用事件冒泡阶段或者事件捕获阶段,来进行事件委托,这样一个函数绑定在公共父元素上,就能解决重复的问题

3. 委托后:

一个函数绑定在公共父元素上,就能解决之前重复的问题, 比如下面的这种代码

达到一劳永逸的作用,即使后面追加button,但只要其标签内能含有我们要的数据,属性,就都还能继续这个函数,也不会影响什么,

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值