事件冒泡

  简单的讲,当子元素的事件处理函数被触发(如onclick),该事件会从事件源(当前子元素)逐级向上层元素传递,触发祖先元素的 onclik 事件,一直到最外层 html 根元素。

  这可能会带来困扰,不必要的事件处理函数被执行了,不过我们可以阻止事件冒泡。事件触发时,会传入一个event对象,它有一个 stopPropagation() 方法可以阻止事件冒泡。

  事件冒泡机制当然也有有利的一面,事件代理就是基于浏览器的事件冒泡机制。

事件代理

  事件代理也叫事件委托,当我们需要为父元素的很多子元素添加事件时,可以通过把事件添加到父元素并把事件委托给父元素来触发事件处理函数。

  在开发中,我们有时会遇到给列表每一个子元素都添加一个事件,可以用遍历来操作,这种方法固然简单,但是如果这个列表有巨量的子元素的时候,就要消耗大量的性能,并且当子元素需要新增的时候,每增加一个子元素就需要遍历一次,这种方法就更不可取。

  事件委托不仅实现相同了功能,而且大大减少了DOM操作。

    <ul class="wrap"><li class="item">1111<button>删除</button></li><li class="item">2222<button>删除</button></li><li class="item">3333<button>删除</button></li><li class="item">4444<button>删除</button></li><li class="item">5555<button>删除</button></li></ul><button class="add">添加子元素</button><script>let oWrap = document.getElementsByClassName('wrap')[0];let oItem = document.getElementsByClassName('item');let oAdd = document.getElementsByClassName('add')[0];oWrap.addEventListener('click',function(e){//判断事件目标元素是否为 li ,并显示它的第一个子节点的文本内容if(e.target && e.target.nodeName.toLowerCase() == 'li'){console.log(e.target.childNodes[0].textContent);}//判断事件目标元素是否为 button ,删除它的父元素if(e.target && e.target.nodeName.toLowerCase() == 'button'){oWrap.removeChild(e.target.parentNode);}})//添加子节点
        oAdd.addEventListener('click',function () { let oLi = document.createElement('li');oLi.setAttribute('class','item');oLi.innerHTML = oItem.length+1+'<button>删除</button>';oWrap.appendChild(oLi);})</script>

转载于:https://www.cnblogs.com/sspeng/p/9719854.html

javascript 事件冒泡和事件代理相关推荐

  1. JavaScript:事件冒泡和事件委托

    2019独角兽企业重金招聘Python工程师标准>>> JavaScript事件代理和委托(Delegation) JavaScript事件冒泡和事件委托 JavaScript:通过 ...

  2. JavaScript(js)事件冒泡、事件捕获、事件委托详解

    JavaScript(js)事件冒泡.事件捕获.事件委托详解 1.什么是事件 JavaScript和HTML之间的交互是通过事件实现的.事件,就是文档或浏览器窗口发生的一些特定的交互瞬间.可以使用监听 ...

  3. javascript中的事件冒泡、事件捕获和事件执行顺序

    谈起JavaScript的 事件,事件冒泡.事件捕获.阻止默认事件这三个话题,无论是面试还是在平时的工作中,都很难避免. DOM事件标准定义了两种事件流,这两种事件流有着显著的不同并且可能对你的应用有 ...

  4. addeventlistener事件第三个参数_简析JavaScript 事件绑定、事件冒泡、事件捕获和事件执行顺序...

    这篇文章主要介绍了javaScript 事件绑定.事件冒泡.事件捕获和事件执行顺序整理总结的相关资料 (一)事件绑定的几种方式 javascript给DOM绑定事件处理函数总的来说有2种方式:在htm ...

  5. “约见”面试官系列之常见面试题第三十四篇之事件冒泡、事件捕获、事件代理(建议收藏)

    对于事件的传播机制,Netscape Communicator采用的是事件捕获(event capture),IE9.Safari.Chrome.Opera和Firefox采用的是事件冒泡(event ...

  6. javascript的事件冒泡,阻止事件冒泡和事件委托, 事件委托是事件冒泡的一个应用。...

    2018年12月13日更新 <!DOCTYPE html> <html lang="en"> <head><meta charset=&q ...

  7. JavaScript学习(二十八)—事件冒泡和事件捕获

    JavaScript学习(二十八)-事件冒泡和事件捕获 一.什么是事件流? 简单说,事件流就是指事件的执行顺序,他包含两种模式:事件冒泡.事件捕获. (一).事件冒泡 最常用的一种模式,就是指事件的执 ...

  8. JavaScript事件冒泡和事件委托

    JavaScript事件冒泡和事件委托 付建宇 - 2 条评论 接触JavaScript不久,学的东西也不是特别多.小雨就是习惯把平时学到的东西拿出来分享.一方面加强自己的印象,一方面可以让自己的经验 ...

  9. 简析JavaScript 事件绑定、事件冒泡、事件捕获和事件执行顺序

    JavaScript 事件绑定.事件冒泡.事件捕获和事件执行顺序 这篇文章主要介绍了javaScript 事件绑定.事件冒泡.事件捕获和事件执行顺序整理总结的相关资料 (一)事件绑定的几种方式 jav ...

最新文章

  1. 复制构造函数(拷贝构造函数)
  2. 《Unity 4 3D开发实战详解》一6.7 物理引擎综合案例
  3. Lintcode107 Word Break solution 题解
  4. C#开发Unity游戏教程之游戏对象的行为逻辑方法
  5. Python 类的定义、继承及使用对象
  6. Linq 常用操作(增删改)
  7. 纯数学思想——在哈尔滨的寒风中
  8. MyEclipse设置选中单词其它同名单词前景色和背景色
  9. Android -- 创建XML文件对象及其序列化, pull解析XML文件
  10. php mysql 实现原理_PHP底层和mysql的通信原理
  11. C# .NET与数据结构
  12. websocket来回收发消息
  13. 【HTTP请求】、详解
  14. Java 中 Comparable 和 Comparator 比较(转)
  15. python 分词器比较
  16. 计算机会考ppt考试,信息技术会考Powerpoint复习要点
  17. NLP实验一:形式语言和自动机
  18. 月薪过万是普遍现象吗?很抱歉,这事大部分人的错觉
  19. 网易邮箱发送显示服务器出错,网易邮件发送不出去的错误代码详解 (MI:SFQ错误等)...
  20. win10c语言乱码修复方法,大神详解win10系统记事本中文变乱码的处理方案

热门文章

  1. 【C#】使用DWM实现无边框窗体阴影或全透窗体
  2. [AT2558]Many Moves
  3. 微信 小程序组件 焦点切换
  4. JavaScript 中 apply 、call 的详解
  5. Ubuntu下使用Git_2
  6. WebSocket使用80端口的方法
  7. Linux:计划任务之at
  8. 讲一个让你们难过很久的故事吧?
  9. 在银行里存两千万,光吃利息够花吗?
  10. 假如买彩票中了100万怎样安全地把钱领回来?