美文网首页
js事件委托

js事件委托

作者: JYOKETSU3 | 来源:发表于2017-09-29 16:19 被阅读0次
  • 定义:通俗的讲,事件就是onclickonmouseoveronmouseout等就是事件,委托呢,就是让别人来做,这个事件本来是加在某些元素上的,然而你却加到别人身上来做,完成这个事件。
  • 原理:利用冒泡的原理,把事件加到父级上,触发执行效果。
  • 好处:1. 减少dom的遍历与dom操作,提高性能。2. 动态新添加的元素还会有之前的事件。
示例:鼠标放置到li上后改变当前li背景色
html:
<ul id="ul">
  <li>aaaaaaaa</li>
  <li>bbbbbbbb</li>
  <li>cccccccc</li>
</ul>
不用事件委托:
window.onload = function(){
  var oUl = document.getElementById("ul");
  var aLi = oUl.getElementsByTagName("li");

  for(var i=0; i<aLi.length; i++){
    aLi[i].onmouseover = function(){
      this.style.background = "red";
    }
    aLi[i].onmouseout = function(){
      this.style.background = "";
    }
  }
}

利用遍历就可以做到li上面添加鼠标事件。
但是如果说我们可能有很多个li用for循环的话就比较影响性能。

使用事件委托:
window.onload = function(){
  var oUl = document.getElementById("ul");
  var aLi = oUl.getElementsByTagName("li");

/*
这里要用到事件源
*/
  oUl.onmouseover = function(ev){
    var ev = ev || window.event;
    var target = ev.target || ev.srcElement;
    if(target.nodeName.toLowerCase() == "li"){
    target.style.background = "red";
    }
  }
  oUl.onmouseout = function(ev){
    var ev = ev || window.event;
    var target = ev.target || ev.srcElement;
    if(target.nodeName.toLowerCase() == "li"){
    target.style.background = "";
    }
  }
}

这样,当鼠标在li上时,根据事件冒泡,由当前节点(当前li节点触发了ul的mouseover事件)自下而上触发事件,当节点对象是li时执行我们的操作。避免了dom遍历。
  此外,和事先遍历dom为每个li绑定事件不同,事件委托的方式是将事件绑定在ul上,所以在运行时动态添加的li上仍有效果。


术语解释:

  • 事件对象: 如上代码,当onmousemove事件发生时,就会产生一个事件对象,就是程序中的event对象
  • 获取事件对象var e = event || window.event;IE下是window.event,标准下是event
  • 事件源:事件源,在事件中,当前操作的那个元素就是事件源。
  • 获取事件源:IE:window.event.srcElement ,标准:event.target
  • target.nodeName:找到元素的标签名

*笔记整理自博客园

相关文章

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

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

  • JS写事件代理

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

  • 事件委托

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

  • js事件委托

    通过构建父元素和子元素,来控制事件。 先通过html构建父元素div,并嵌套一个子元素div,写入不同的方法,设置...

  • js事件委托

    事件委托:1、缘由在做一个项目,点击按钮出现蒙版,但是触发蒙版关闭蒙版,但是给蒙版添加点击事件的话,蒙版上的按钮也...

  • js事件委托

    我们收取快递有两种方法:一是在特定的地点等快递的到来,二是委托人代收。现实当中,我们大都采用委托的方案。而委托人接...

  • JS事件委托

    一、事件委托有三种方法 点击 btn.onclick = function(){...} btn.addEvent...

  • js事件委托

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

  • js事件委托

    定义:通俗的讲,事件就是onclick,onmouseover,onmouseout等就是事件,委托呢,就是让别人...

  • JS事件委托

    事件委托从字面意思上理解就是把事件委托给别人做。这样有什么好处呢?设想一下,一个ul里有很多li,现在要给每一个l...

网友评论

      本文标题:js事件委托

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