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

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

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

一、事件属性:event.target

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

例子1

1 1 <!DOCTYPE html> 2 2 <html> 3 3 4 4 <head> 5 5 <meta charset="UTF-8"> 6 6 <title></title> 7 7 <style type="text/css"> 8 8 #main { 9 9 width: 200px; 1010 height: 100px; 1111 background: red; 1212 } 1313 </style> 1414 <script type="text/javascript"> 1515 window.onload = function() { 1616 document.getElementById("main").onclick = function(e) { 1717 /*这里e等于window.event也可以写成event.*/ 1818 console.log(e.target); //<div id="main" class="sb js node"><span>我爱JavaScript</span></div> 1919 console.log(e.target.id); //main 返回点击元素里存在的id属性值 2020 console.log(e.target.tagName); //DIV 2121 console.log(e.target.nodeName); //DIV 2222 console.log(e.target.classList); //输出dom类列表,没有即空 2323 console.log(e.target.className); // sb js node 2424 console.log(e.target.innerHTML); //<span>我爱JavaScript</span> 2525 console.log(e.target.innerText); //我爱JavaScript 2626 2727 console.log("----------------------------------------------------") 2828 2929 console.log(e.type); //获取事件类型:click 3030 console.log(event.pageX+":"+event.pageY); //鼠标相对于文件的左侧和顶部边缘的位置 3131 console.log(event.target); //获取发起事件的标签 3232 console.log(event.currentTarget); //获取发起事件的标签 3333 console.log(event.currentTarget.id); //获取发起事件的标签里的id属性值 3434 console.log(event.which) //针对键盘和鼠标事件,这个属性能确定你到底按的是哪个键或按钮 常用在keydown事件中 3535 console.log(event.timeStamp); //事件触发与事件创建之间的时间间隔 3636 alert("点击了id为:"+event.target.id+"的"+event.target.nodeName+"标签"); 3737 3838 // console.log(e.preventDefault()); //阻止默认事件 3939 // console.log(e.stopPropagation()); //阻止事件冒泡到父元素 4040 } 4141 } 4242 </script> 4343 </head> 4444 4545 <body> 4646 <div id="main" class="js node"><span>我爱JavaScript</span></div> 4747 </body> 4848 4949 </html>

View Code

输出如下:

    

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

例子中的事件传播顺序:

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

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

1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <title>一个增删demo</title> 6</head> 7<body> 8 <input type="text" id="text"> 9 <input type="button" value="添加" id="button"> 10 <ul> 11 <li>1<button class="btn" id="1">删除</button></li> 12 <li>2<button class="btn" id="2">删除</button></li> 13 <li>3<button class="btn" id="3">删除</button></li> 14 </ul> 15 <script> 16 var button = document.getElementById("button"); 17 var text = document.getElementById("text"); 18 var ul = document.getElementsByTagName("ul")[0]; 19 var btnClass = document.getElementsByClassName("btn"); 20 button.onclick = function(){ 21 var deleteButton = document.createElement("button"); 22 var value = text.value; 23 deleteButton.setAttribute("class","btn"); 24 var deleteText = document.createTextNode("删除"); 25 deleteButton.appendChild(deleteText); 26 var li = document.createElement("li"); 27 var liText = document.createTextNode(value); 28 li.appendChild(liText); 29 li.appendChild(deleteButton); 30 ul.appendChild(li); 31 for(var i=0;i<btnClass.length;i++){ 32 btnClass[i].onclick=function(){ 33 this.parentNode.parentNode.removeChild(this.parentNode); 34 } 35 } 36 } 37 38 for(var i=0;i<btnClass.length;i++){ 39 btnClass[i].onclick=function(){ 40 this.parentNode.parentNode.removeChild(this.parentNode); 41 } 42 } 43 </script> 44</body> 45</html>

效果如下:

  

二、currentTarget 

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

例子1

1<body> 2<ul id="ul">ul 3 <li>li<a href="">a</a></li> 4 <li>li<a href="">a</a></li> 5 <li>li<a href="">a</a></li> 6 </ul> 7 <script> 8 var ul = document.getElementById("ul"); 9 ul.onclick = function(event){ 10 var tar = event.target; 11 var current = event.currentTarget; //使用target感觉也没有太大区别,具体鉴定需要多去尝试不同的demo 12 var tagName = tar.nodeName.toLowerCase(); 13 console.log(tar == this); 14 event.preventDefault(); 15 } 16 </script> 17</body>

效果

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

点赞
收藏

评论区

加载中...

相关推荐

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

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )