什么是JS事件委托?如何实现?代码

原文地址:http://icaoguo.com/2018/12/05/%E4%BB%80%E4%B9%88%E6%98%AFjs%E4%BA%8B%E4%BB%B6%E5%A7%94%E6%89%98%EF%BC%9F%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%EF%BC%9F%E4%BB%A3%E7%A0%81/

什么是事件委托?
——什么是事件?
HTML 4.0 的新特性之一是有能力使 HTML 事件触发浏览器中的动作(action),比如当用户点击某个 HTML 元素时启动一段 JavaScript。 —— w3school
如果你学过单片机的话,那边管这个叫做“中断”。
简单来说,就是用户在你页面上做了一些动作,称做事件。
只要用户做了动作,就执行相关的代码。

事件机制在设计的时候有一些原则,比如绑定在父元素的事件,用户在子元素上也一样可以触发。

利用这个特性,所以才有了事件委托。

有啥用?
1:绑定事件越多,浏览器内存占用越大,严重影响性能。
2:ajax的出现,局部刷新的盛行,导致每次加载完,都要重新绑定事件
3:部分浏览器移除元素时,绑定的事件并没有被及时移除,导致的内存泄漏,严重影响性能
4:大部分ajax局部刷新的,只是显示的数据,而操作却是大部分相同的,重复绑定,会导致代码的耦合性过大,严重影响后期的维护。

使用事件委托可以解决上述的4个痛点。

怎么做?
实际上很简单,每次捕捉到事件的时候都会获得一个 event对象,这个对象中有一个target属性,也就是我们本次产生交互的具体目标。

只要把这个e.target 的 nodeName 或者 class拿来做判断,得到一个我们想要的目标,才触发相应的事件,这就算完成了。

具体代码。

 

 

  <!DOCTYPE html>
  <html lang="en">
  <head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>清汤挂面的草果游戏</title>
  <style>
  div{background: red;}
  ul{background: green;}
  li{background: blue;}
  p{background: gray;}
  </style>
  </head>
  <body>
   
  <div id="wjh">
  <ul>
  <li>
  <p>233333</p>
  </li>
  <li>
  <p>233333</p>
  </li>
  </ul>
  </div>
  <script>
  document.getElementById("wjh").addEventListener("click", function(e){
   
  // 兼容性处理
  var event = e || window.event;
  var target = event.target || event.srcElement;
   
  if(e.target.nodeName == "P"){
  console.log(23333);
  }
   
  });
  </script>
  </body>
  </html>
posted @ 2018-12-05 09:13  大赚佬  阅读(369)  评论(0)    收藏  举报