博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
探讨e.target与e.currentTarget
阅读量:4329 次
发布时间:2019-06-06

本文共 2370 字,大约阅读时间需要 7 分钟。

target与currentTarget两者既有区别,也有联系,那么我们就来探讨下他们的区别吧,一个通俗易懂的例子解释一下两者的区别:

1  2  3  4     Example 5  6  7     
8
9
10
11 12
var a = document.getElementById('A'),      b = document.getElementById('B');    function handler (e) {    console.log(e.target);    console.log(e.currentTarget);}a.addEventListener('click', handler, false);

当点击A时:输出:

1 
...
2
...

当点击B时:输出:

1 
2
...

也就是说,currentTarget始终是监听事件者,而target是事件的真正发出者

由于要兼容IE浏览器,所以一般都在冒泡阶段来处理事件,此时target和currentTarget有些情况下是不一样的。

如:

1 function(e){2     var target = e.target || e.srcElement;//兼容ie7,83     if(target){4         zIndex = $(target).zIndex();5     }6 }7 8 //往上追查调用处9 enterprise.on(img,'click',enterprise.help.showHelp);

IE7-8下使用$(target).zIndex();可以获取到 

IE7-8下使用$(e.currentTarget).zIndex();获取不到,可能是IE下既没有target,也没有currentTarget

再来证实一下猜测,在IE浏览器下运行以下代码:

1 2 

对象this、currentTarget和target 

在事件处理程序内部,对象this始终等于currentTarget的值,而target则只包含事件的实际目标。如果直接将事件处理程序指定给了目标元素,则this、currentTarget和target包含相同的值。来看下面的例子:

1 var btn = document.getElementById("myBtn");2 btn.onclick = function (event) {3     alert(event.currentTarget === this); //ture4     alert(event.target === this); //ture5 };

这个例子检测了currentTarget和target与this的值。由于click事件的目标是按钮,一次这三个值是相等的。如果事件处理程序存在于按钮的父节点中,那么这些值是不相同的。再看下面的例子:

1 document.body.onclick = function (event) {2     alert(event.currentTarget === document.body); //ture3     alert(this === document.body); //ture4     alert(event.target === document.getElementById("myBtn")); //ture5 };

当单击这个例子中的按钮时,this和currentTarget都等于document.body,因为事件处理程序是注册到这个元素的。然而,target元素却等于按钮元素,以为它是click事件真正的目标。由于按钮上并没有注册事件处理程序,结果click事件就冒泡到了document.body,在那里事件才得到了处理。

在需要通过一个函数处理多个事件时,可以使用type属性。例如:

1 var btn = document.getElementById("myBtn"); 2 var handler = function (event) { 3         switch (event.type) { 4         case "click": 5             alert("Clicked"); 6             break; 7         case "mouseover": 8             event.target.style.backgroundColor = "red"; 9             bread;10         case "mouseout":11             event.target.style.backgroundColor = "";12             break;13         }14     };15 btn.onclick = handler;16 btn.onmouseover = handler;17 btn.onmouseout = handler;

如果对本文有任何意见和建议,欢迎留言,有错误请指出,谢谢!!!

转载于:https://www.cnblogs.com/bo-haier/p/5644268.html

你可能感兴趣的文章
总结(6)--- python基础知识点小结(细全)
查看>>
亿级曝光品牌视频的幕后设定
查看>>
ARPA
查看>>
JSP开发模式
查看>>
我的Android进阶之旅------>Android嵌入图像InsetDrawable的使用方法
查看>>
Detours信息泄漏漏洞
查看>>
win32使用拖放文件
查看>>
Android 动态显示和隐藏软键盘
查看>>
raid5什么意思?怎样做raid5?raid5 几块硬盘?
查看>>
【转】how can i build fast
查看>>
null?对象?异常?到底应该如何返回错误信息
查看>>
django登录验证码操作
查看>>
(简单)华为Nova青春 WAS-AL00的USB调试模式在哪里开启的流程
查看>>
图论知识,博客
查看>>
[原创]一篇无关技术的小日记(仅作暂存)
查看>>
20145303刘俊谦 Exp7 网络欺诈技术防范
查看>>
原生和jQuery的ajax用法
查看>>
iOS开发播放文本
查看>>
20145202马超《java》实验5
查看>>
JQuery 事件
查看>>