• target和currentTarget


    target是事件的调用对象(event dispatcher),currentTarget是事件的处理对象(event processor)

    1.target在事件流的目标阶段;currentTarget在事件流的捕获,目标及冒泡阶段。只有当事件流处在目标阶段的时候,两个的指向才是一样的,而当处于捕获和冒泡阶段的时候,target指向被单击的对象而currentTarget指向当前事件活动的对象(一般为父级)。
    2.currentTarget属性具备两条件:注册侦听器(如addEventListener);正在处理事件(如click)。

     1 <div id="outer" style="background:#099">  
     2         click outer:div
     3         <p id="inner" style="background:#9C0">click inner:p</p>  
     4         <br>  
     5     </div>  
     6       
     7     <script type="text/javascript">  
     8     function G(id){  
     9         return document.getElementById(id);      
    10     }  
    11     function addEvent(obj, ev, handler){  
    12         if(window.attachEvent){  
    13             obj.attachEvent("on" + ev, handler);  
    14         }else if(window.addEventListener){   
    15             obj.addEventListener(ev, handler, false);  
    16         }  
    17     }  
    18     function test(e){  
    19         alert("e.target.tagName : " + e.target.tagName + "
     e.currentTarget.tagName : " + e.currentTarget.tagName);  
    20     }    
    21     var outer = G("outer");  
    22     var inner = G("inner");  
    23     //addEvent(inner, "click", test);  
    24     addEvent(outer, "click", test);  
    25     </script>

    如图

    当点击inner时,此时触发事件的对象,也就是target是inner:p,因为是点击它触发的,此时的活动对象,也就是currentTarget为outter:div,因为他是直接执行者,由于子元素点击冒泡至此触发。

    当点击outer时,事件c触发和执行的都为outer:div,所以target和currentTarget都是它本身,也不存在冒泡和捕获

    当我们改代码

    addEvent(outer, "click", test);
    addEvent(inner, "click", test);  时,此时监听的是inner,点击Inner,显示两个对象都为inner,无冒泡捕获,点击outer,无反应,因为没有为outer设置点击事件
     
      
  • 相关阅读:
    week4:周测错题
    小程序1:登录/注册小程序
    小程序2:实现一个购物车
    day26:装饰器&面向对象当中的方法&property
    day25:7个魔术方法&5个关于类的魔术属性
    day24:多态&魔术方法__new__&单态模式
    day23:单继承&多继承&菱形继承&__init__魔术方法
    day22:面向对象封装对象操作&类操作&面向对象删除操作
    day21:正则函数&模块和包(import)
    APP探索之iAPP
  • 原文地址:https://www.cnblogs.com/cumting/p/6912597.html
Copyright © 2020-2023  润新知