JS事件处理程序中的this

使用DOM0级方法指定的事件处理程序被认为是元素的方法。因此,这时候的事件处理程序是在元素的作用域中运行;换句话说,程序中的this引用当前元素。来看一个例子:

var btn=document.getElementById('myBtn');
btn.onclick=function(){
    alert(this.id);  //"myBtn"
}

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

var btn=document.getElementById('myBtn');
btn.onclick=function(event){
    alert(event.currentTarget===this);  //true
    alert(event.target===this);  //true
}
备注
  • currentTarget:
    只读的Element类型。其事件处理程序当前 正在处理事件的那个元素。
  • target:
    只读的Element类型。事件的目标。

因此,若事件是冒泡到祖先元素上进行处理的,则this和currentTarget是事件被委托的元素。来看一个例子:

//html
<div id="delegateEle">
    <div id="targetEle">click</div>
</div>

//javascript
var dom=document.getElementById('delegateEle');
dom.addEventListener('click',function(e){
    //以下为单击targetEle元素时的结果
    console.log(this.id);  //"delegateEle"
    console.log(e.currentTarget.id);  //"delegateEle"
    console.log(e.target.id);  //"targetEle"
});
注:以上在IE8及以下版本中不适用。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 声明:本文来源于http://www.webzsky.com/?p=731我只是在这里作为自己的学习笔记整理一下(...
    angryyan阅读 7,168评论 1 6
  • JavaScript 程序采用了异步事件驱动编程模型。在这种程序设计风格下,当文档、浏览器、元素或与之相关的对象发...
    劼哥stone阅读 1,300评论 3 11
  • 以下文章为转载,对理解JavaScript中的事件处理机制很有帮助,浅显易懂,特分享于此。 什么是事件? 事件(E...
    jxyjxy阅读 3,087评论 1 10
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,286评论 19 139
  • 好想谈恋爱! 那种全世界只有你的恋爱 那种为你拼1000块拼图然后裱起来送你的恋爱 那种他在你上班时发短信说不用回...
    向阳之新阅读 450评论 1 1