事件委托是javascript中一个很重要的概念,其基本思路就是利用了事件冒泡的机制,给上级(父级)元素触发事件的dom对象上绑定一个处理函数。在当有需要很多dom对象要绑定事件的情况下,可以使用事件委托。即使是各个dom对象所触发的事件不同的时候,也可以通过事件委托,利用switch语句按需绑定事件,可以帮助我们减少大量的DOM绑定带来的内存开销。

从事件冒泡时开始就发生了事件委托,我们可以直接给父元素绑定事件监听,用来检测在其子元素内发生的事件。这也是类似 SproutCore(http://www.sproutcore.com/)这种框架所使用的技术,用来减少应用中的事件监听的数量 :

list.addEventListener("click", function(e){
    if (e.currentTarget.tagName == "li") {
        /* ... */
        return false;}
}, false);

jQuery 的处理方式更妙,只需给 delegate() 函数传入子元素的选择器、事件类型和回调函数即可。如果使用事件绑定的话,就会给每一个 l i 元素都绑定 click 事件,然而使用 delegate() 方法就能减少这种事件监听的数量,改善代码性能 :

$("ul li").click(function(){ /* ... */ });    // 不要这样做,这样会给每个 li 元素都添加事件监听(非常浪费)

$("ul").delegate("li", "click", /* ... */);   // 这样只会添加一个事件监听

使用事件委托的另一个好处是,所有为元素动态添加的子元素都具有事件监听。因此,在上面的例子中,在页面载入完成后添加的 li 节点同样可以触发点击事件的回调。

转载于:https://www.cnblogs.com/jones-c/p/3696351.html

javascript使用事件委托相关推荐

  1. JavaScript之事件委托(附原生js和jQuery代码)

    事件委托的原理依赖于事件冒泡,可以通过给父元素的事件委托来确定是哪个子元素触发了事件从而做一系列操作. 使用事件委托的优点 1.操作子元素时不用一一遍历,可以根据事件触发的对象而进行相应操作 dom结 ...

  2. JavaScript用事件委托实现留言板功能

    用事件委托实现留言板功能. <!DOCTYPE html> <html lang="en"><head><meta charset=&qu ...

  3. JavaScript【事件委托实现排他思想】

    事件委托实现排他思想: <style>ul {background-color: #ccc;}.active {color: red;}</style> </head&g ...

  4. Javascript事件模型系列(二)事件的捕获-冒泡机制及事件委托机制

    一.事件的捕获与冒泡 由W3C规定的DOM2标准中,一次事件的完整过程包括三步:捕获→执行目标元素的监听函数→冒泡,在捕获和冒泡阶段,会依次检查途径的每个节点,如果该节点注册了相应的监听函数,则执行监 ...

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

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

  6. javascript和jq的事件委托

    2019独角兽企业重金招聘Python工程师标准>>> 今天在公司,有个需求是,通过ajax动态查询数据,回来,再添加到一个ul的li元素中,例如(点击生成 li 模拟,加载数据生成 ...

  7. Javascript事件委托

    概念: 事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件. 事件冒泡:就是事件从最深的节点开始,然后逐步向上传播事件,举个例子:页面上有这么一个节点树,div>ul ...

  8. javascript事件监听与事件委托

    事件监听与事件委托 在js中,常用到element.addEventListener()来进行事件的监听.但是当页面中存在大量需要绑定事件的元素时,这种方式可能会带来性能影响.此时,我们可以用事件委托 ...

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

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

最新文章

  1. 三流面试聊技术,二流面试聊框架,一流面试…
  2. 编程珠玑第八章——分治算法求解数组中的最大的连续和
  3. linux通信机制总结
  4. 简明python教程 --C++程序员的视角(九):函数式编程、特殊类方法、测试及其他
  5. Word2Vec中文语料实战
  6. JavaScript实现返回数字的二进制表示中使用的位数bitLength算法(附完整源码)
  7. 我好像明白了如何画序列图了
  8. C# 操作Sqlite
  9. Jenkins Kubernetes 如何协同工作
  10. 在Ubuntu 18.04上安装MongoDB
  11. github速成手册
  12. python写错了如何撤销-Python集成开发工具Pycharm的使用方法:复制,撤销上一步.......
  13. scala Option类入门解析
  14. Android关闭输入法键盘
  15. python从入门到实践16章答案
  16. Linux驱动01 - Timer
  17. 通过Keras + LSTM训练天气污染程度预测模型
  18. OC中的Block属性
  19. ajax下拉列表模糊,JS仿百度自动下拉框模糊匹配提示
  20. java lambdamart库,LambdaMART笔记

热门文章

  1. 大家马致远是哪个朝代的,马致远作品赏析
  2. 这年头,千万不要花钱创业
  3. 直播卖货到底是不是卖人设?
  4. 亏了1000万,卖房卖车也要坚持梦想,值吗?
  5. 社区内放自助打印机,赚钱吗?
  6. 实体店想多赚钱就要学会互联网思维
  7. i5 9400f和GTX1660能玩战地5吗?
  8. 数据线为什么不弄两头都是Typec接口的呢?
  9. SSM中异常的几种处理方式
  10. mysql查询时间提前五天_mysql选择月份查询该月有付款的数据(间隔x月并提前5天付款)...