JavaScript事件属性event.target和currentTarget 属性的区别。

Stella981
• 阅读 303

event.target 获取的是触发事件的标签元素

event.currentTarget 获取到的是发起事件的标签元素

一、事件属性:event.target

target事件委托的定义:本来该自己干的事,但是自己不干,交给别人来干

例子1

JavaScript事件属性event.target和currentTarget 属性的区别。 JavaScript事件属性event.target和currentTarget 属性的区别。

 1 <!DOCTYPE html>
 2 <html>
 3 
 4     <head>
 5         <meta charset="UTF-8">
 6         <title></title>
 7         <style type="text/css">
 8             #main {
 9                 width: 200px;
10                 height: 100px;
11                 background: red;
12             }
13         </style>
14         <script type="text/javascript">
15             window.onload = function() {
16                 document.getElementById("main").onclick = function(e) {
17                     /*这里e等于window.event也可以写成event.*/
18                     console.log(e.target);                //<div id="main" class="sb js node"><span>我爱JavaScript</span></div>
19                     console.log(e.target.id);            //main  返回点击元素里存在的id属性值
20                     console.log(e.target.tagName);        //DIV
21                     console.log(e.target.nodeName);        //DIV
22                     console.log(e.target.classList);    //输出dom类列表,没有即空
23                     console.log(e.target.className);    // sb js node
24                     console.log(e.target.innerHTML);    //<span>我爱JavaScript</span>
25                     console.log(e.target.innerText);    //我爱JavaScript
26                     
27                      console.log("----------------------------------------------------")
28 
29                     console.log(e.type);    //获取事件类型:click
30                     console.log(event.pageX+":"+event.pageY);  //鼠标相对于文件的左侧和顶部边缘的位置
31                     console.log(event.target);                //获取发起事件的标签
32                     console.log(event.currentTarget);        //获取发起事件的标签 
33                     console.log(event.currentTarget.id);    //获取发起事件的标签里的id属性值
34                     console.log(event.which)            //针对键盘和鼠标事件,这个属性能确定你到底按的是哪个键或按钮 常用在keydown事件中
35                     console.log(event.timeStamp);            //事件触发与事件创建之间的时间间隔 
36                     alert("点击了id为:"+event.target.id+"的"+event.target.nodeName+"标签");
37 
38                     // console.log(e.preventDefault());       //阻止默认事件
39                     // console.log(e.stopPropagation());      //阻止事件冒泡到父元素
40                 }
41             }
42         </script>
43     </head>
44 
45     <body>
46         <div id="main" class="js node"><span>我爱JavaScript</span></div>
47     </body>
48 
49 </html>

View Code

输出如下:

    JavaScript事件属性event.target和currentTarget 属性的区别。

tip:给网页里ID为main的div标签绑定了一个鼠标点击事件,而在实际中,在点击了这个div内的所有子标签时,都会触发这个事件,这个过程就是“冒泡”

例子中的事件传播顺序:

  • 在冒泡型事件流中,是span> div > body > html > document。
  • 在捕获型事件流中,是document > html > body> div > span。

例子2:一个添加删除的demo

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>一个增删demo</title>
</head>
<body>
    <input type="text" id="text">
    <input type="button" value="添加" id="button">
    <ul>
        <li>第1个<button class="btn" id="1">删除</button></li>
        <li>第2个<button class="btn" id="2">删除</button></li>
        <li>第3个<button class="btn" id="3">删除</button></li>
    </ul>
    <script>
            var button = document.getElementById("button");
            var text = document.getElementById("text");
            var ul = document.getElementsByTagName("ul")[0];
            var btnClass = document.getElementsByClassName("btn");        
        button.onclick = function(){
            var deleteButton = document.createElement("button");    
            var value = text.value;
                deleteButton.setAttribute("class","btn");
            var deleteText = document.createTextNode("删除");
                deleteButton.appendChild(deleteText);
            var li = document.createElement("li");
            var liText = document.createTextNode(value);
                li.appendChild(liText);
                li.appendChild(deleteButton);
                ul.appendChild(li);
            for(var i=0;i<btnClass.length;i++){
                btnClass[i].onclick=function(){
                this.parentNode.parentNode.removeChild(this.parentNode);
            }
        }
        }

            for(var i=0;i<btnClass.length;i++){
                btnClass[i].onclick=function(){
                    this.parentNode.parentNode.removeChild(this.parentNode);
                }
            }
    </script>
</body>
</html>

效果如下:

  JavaScript事件属性event.target和currentTarget 属性的区别。

二、currentTarget 

event.currentTarget的作用是什么呢,我觉得他和this 的作用是差不多的,始终返回的是绑定事件的元素

例子1

<body>
<ul id="ul">ul
        <li>li<a href="">a</a></li>
        <li>li<a href="">a</a></li>
        <li>li<a href="">a</a></li>
    </ul>
    <script>
        var ul = document.getElementById("ul");
        ul.onclick = function(event){
            var tar = event.target;
            var current = event.currentTarget;    //使用target感觉也没有太大区别,具体鉴定需要多去尝试不同的demo
            var tagName = tar.nodeName.toLowerCase();
            console.log(tar == this);
            event.preventDefault();
        }
    </script>
</body>

效果

JavaScript事件属性event.target和currentTarget 属性的区别。

资料参考:https://www.cnblogs.com/sxz2008/p/6393232.html

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
2年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Stella981 Stella981
2年前
JavaScript事件详解
1.事件传播机制:事件冒泡,事件捕获。2.注册事件处理程序方式:设置html标签属性为事件处理程序,文档元素的事件处理程序属性,名字由“on”后面跟着事件名组成,例如:onclick,onmouseover,用法如下1<d
Stella981 Stella981
2年前
Noark入门之异步事件
引入异步事件主要是为了各模块的解耦,每当完成一个动作时,向系统发布一个事件,由关心的模块自己监听处理,可选择同步处理,异步处理,延迟处理。何时发布事件,当其他模块关心此动作时<br比如获得道具时,任务系统模块要判定完成进度,BI模块需要上报等等都可以监听此事件,已达模块解耦0x00事件源一个实现xyz.noark.core.event
Stella981 Stella981
2年前
JavaScript 基础(四)
HTMLDOMEvent(事件)HTML4.0的新特性之一是有能力使HTML事件触发浏览器中的动作(action),比如当用户点击某个HTML元素时启动一段JavaScript。下面是一个属性列表,这些属性可插入HTML标签来定义事件动作。onclick//当用户点
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这