js 事件委托和事件冒泡

事件委托和事件冒泡

事件委托主要是利用冒泡原理,
何为冒泡?就是子元素的事件传播到父元素,比如说子元素的点击事件同时也会触发父元素的点击事件;
何为委托?当子元素比较多的时候,我不想一个一个地去阻止冒泡,或者一个一个地监听它们的事件,所以我直接利用冒泡原理,将事件监听委托给父级去做;

网上有一个取快递的举例比较好理解,
也就是说,在公司里张三李四王二麻子都有快递要取,但是他们不想自己站在公司门口干等,所以他们就拜托前台小姐姐帮忙接收,前台小姐姐拿到快递以后就会根据他们的名字分发给相应的人。

<ul>
<li></li>
<li></li>
<li></li>
</ul>

比如给 ulli 分别设置了一个点击事件,当点击li 的时候,就会往上传播触发 ul 的点击事件。
事件委托就是把子元素的事件委托给父元素去处理。这样不管我们点击的是哪个 li ,触发的点击事件都只是父级的点击事件
只有一个 li 的时候可以直接阻止冒泡行为,可万一有100呢? 不可能去阻止100次,所以就有了事件委托。

ul.addEventListener('click', function (event) {
  if (event.target.tagName.toLowerCase() === 'li') {
    // some code 根据具体 去处理 一般是有规律可循
    
  }

事件监听

为元素绑定监听函数有三种方式,元素的on- 属性,元素节点的事件属性,以及EventTarget.addEventListener()

<body onload="doSomething()"> 

div.onclick = function (event) {
  console.log('触发事件');
};

window.addEventListener('load', doSomething, false);

元素的on- 属性污染了HTML 元素,不符合HTML 和 JS 分离的原则,onclick 属性只能设置一次,重复设置的话后面的会覆盖前面的,所以一般建议使用第三种 EventTarget.addEventListener()

语法
target.addEventListener(type, listener[, useCapture]);
  • type:事件名称,大小写敏感。
  • listener:监听函数。事件发生时,会调用该监听函数。
  • useCapture:布尔值,表示监听函数是否在捕获阶段(capture)触发(参见后文《事件的传播》部分),默认为false(监听函数只在冒泡阶段被触发)。该参数可选。

使用 EventTarget.addEventListener()的好处:

  • 同一个事件可以添加多个监听函数。 能够指定在哪个阶段(捕获阶段还是冒泡阶段)触发监听函数。 除了 DOM
  • 节点,其他对象(比如window、XMLHttpRequest等)也有这个接口,它等于是整个 JavaScript 统一的监听函数接口。
  • this 的指向

更多

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值