• currentTarget与target


    先看代码:
    <!DOCTYPE html> 
    <html
    <head
    <meta charset=" utf-8"
    <title>蚂蚁部落</title>
    <style type="text/css">
    #ant{
      100px;
      height:60px;
      
    }
    #inner{
      50px;
      height:30px;
      
    }
    </style>
    <script>
    window.onload=function(){
      let obox = document.getElementById("ant");
      let oinner=document.getElementById("inner");
      obox.onclick = function (ev) {
        console.clear();
        console.log(event.target.id);
        console.log(event.currentTarget.id);
      }
    }
    </script>
    </head>
    <body>
    <div id="ant">
      <div id="inner"></div>
    </div>
    </body>
    </html>
     

    上述代码点击不同的元素,在控制台打印出不同内容。

    两个属性的区别也得以体现:

    (1).点击外层div元素,控制台打印截图如下:

    a:3:{s:3:"pic";s:43:"portal/201811/01/013741im8pluala168u84y.png";s:5:"thumb";s:0:"";s:6:"remote";N;}

    (2).点击内部div元素,控制台打印截图如下:

    a:3:{s:3:"pic";s:43:"portal/201811/01/013807m3tt3zfqggampt3f.png";s:5:"thumb";s:0:"";s:6:"remote";N;}

    首先给出两个属性的概念:

    (1).currentTarget属性返回注册事件处理函数的元素。

    (2).target属性返回触发事件处理函数的元素。

    代码分析总结如下:

    (1).注册事件处理函数的元素与触发事件的元素可能是同一个元素,就如点击外层元素。

    (2).注册事件处理函数的元素也可能与触发事件的元素非同一元素,很多事件具有冒泡效果,比如上述代码,点击子元素会触发click事件,根据冒泡原理,事件向上传递到父div元素,并执行注册在其上的事件处理函数,所以点击子元素,target属性返回子元素,currentTarget属性返回当前处理该事件的元素,也就是注册事件处理函数的元素,外层div元素。

    特别说明:上面介绍的都是原生JavaScript中的概念,很多库可能已经将其修改。

    属性的使用案例

    最常见的是利用事件冒泡来实现委托效果,所谓的委托,就是让自己的事情委托给别人办理。

    代码实例如下:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset=" utf-8">
    <meta name="author" content="http://www.softwhy.com/" />
    <title>蚂蚁部落</title>
    <style>
    table {
       300px;
      height: 60px;
      
    }
    table td {
      
    }
    </style>
    <script>
    window.onload=function(){
      let otable=document.getElementsByTagName("table")[0];
      let odiv=document.getElementsByTagName("div")[0];
      otable.onclick=function(ev){
        odiv.innerHTML=ev.target.innerHTML;
      }
    }
    </script>
    </head>
    <body>
    <table cellspacing="1">
      <tr>
        <td>单元格一</td>
        <td>单元格二</td>
        <td>单元格三</td>
        <td>单元格四</td>
      </tr>
      <tr>
        <td>单元格五</td>
        <td>单元格六</td>
        <td>单元格七</td>
        <td>单元格八</td>
      </tr>
    </table>
    <div></div>
    </body>
    </html>

    上述代码点击单元格,会将其中的内容写入div中。

    代码分析如下:

    (1).我们并没有将事件处理函数注册在每一个td之上,而是利用事件冒泡注册在table之上。

    (2).好处很明显,性能比较好,代码也更为清爽,新添加的td元素具有同样的功能。

    (3).利用target属性即可获取触发事件的元素,也就是我们点击的单元格,然后将其内容写入div。

    上面就是委托,本来td单元格的活,交给table去做。ul,li类似。

    原文:http://www.softwhy.com/article-9489-1.html

  • 相关阅读:
    centos部署bladex boot 之docker安装
    git ssh key创建和github使用
    Debian root登录设置
    Linux软件源
    Secure backup
    Python简易web服务
    好久没有更新博客了
    Python实现无向图最短路径
    DWZ使用中遇到的坑
    tronado学习
  • 原文地址:https://www.cnblogs.com/caozhuzi/p/11212037.html
Copyright © 2020-2023  润新知