美文网首页
js 中事件委托

js 中事件委托

作者: 天外来人 | 来源:发表于2017-02-09 10:43 被阅读22次

知识准备:

事件的处理流分成三个阶段:

  • 一:事件捕获阶段:当某个元素触发某个事件时,首先会触发根元素document, 然后事件将沿dom树向下传播给目标节点的每一个祖先节点,直到目标节点。
  • 二:目标阶段:到达目标元素之后,执行目标元素的事件处理函数
  • 三:事件冒泡阶段:从目标元素开始,事件将沿着DOM树向上传播,直到根节点。
Paste_Image.png

事件绑定的缺点

我们看一个demo:

<ul id="parent">
  <li>item 1</li>
  <li>item 2</li>
  <li>item 3</li>
  <li>item 4</li>
</ul>

通过绑定添加事件:

window.onload = function() {
  var parent = document.getElementById('parent');
  var children = parent.getElementsByTagName('li');
  for(var i = 0; i < children.length; i++){
    children[i].onclick = function() {
      alert(this.innerHTML);
    }
  }
}

弊端来了:如果这个ul的子元素允许无限的动态添加,就会出现问题:
1 新添加的元素不会绑定事件,所以需要每次添加li的同时添加绑定事件。
2 绑定的事件越多,性能越差。
为了解决这个问题,可以用事件代理——事件委托

事件委托

直接看demo

<ul id="parent">
  <li> item 1</li>
  <li> item 2</li>
</ul>
<scritpt>
  window.onload = function() {
    var parent = document.getElementById('parent');
    parent.addEventListener('click', function(event){
      var event = event || window.event;
      var target = event.target || event.srcElement;
      if(target.nodeName.toUpperCase() == 'LI'){
      alert(target.innerHTML);  
    }
    });
  }
</script>

好处
1 不需要为每一个元素都添加监听事件而是通过委托给父元素来处理。这样就减少了内存。性能提高了。
2 可以方便动态添加元素, 不需要再为新添加的元素重新绑定事件。

相关文章

  • JS写事件代理

    js中的事件委托或是事件代理详解

  • js 中事件委托

    知识准备: 事件的处理流分成三个阶段: 一:事件捕获阶段:当某个元素触发某个事件时,首先会触发根元素documen...

  • web前端面试题@六(事件委托)

    *说到事件委托,我们首先先要知道什么是事件委托—— · 那么什么是事件委托呢??? JS里的事件委托就是当事件...

  • js事件深入学习

    JavaScript的事件机制包含,事件绑定、事件监听、事件委托(事件代理)等 js中的事件流 ① .冒泡:当下级...

  • 事件委托

    还有很多要学,要加油哇。回正题。参考: js中的事件委托或是事件代理详解 1、基本概念事件委托就是利用事件冒泡,只...

  • js中的事件委托

    1.什么是事件委托 2.事件委托的好处 demo

  • js中的事件委托

    1,什么是事件委托:通俗的讲,事件就是onclick,onmouseover,onmouseout,等就是事件,委...

  • js中的事件委托

    JavaScript事件委托又叫事件代理。它是一种简单的技巧,通过它你可以把事件处理器添加到一个父级元素上,这样就...

  • js事件委托

    前言 事件委托,也叫事件代理,是js事件中的一种常用技巧。事件委托的原理就是利用冒泡事件的机制,为一些节点的祖先节...

  • 事件委托

    事件委托 事件委托其实就是利用JS事件冒泡机制把原本需要绑定在子元素的响应事件(click、keydown……)委...

网友评论

      本文标题:js 中事件委托

      本文链接:https://www.haomeiwen.com/subject/ldliittx.html