介绍
在事件处理函数的event
对象中,有一个target
属性,我们都知道它是指事件目标。其实在event
中还有一个currentTarget
属性,不知道这个属性还好,知道的话可能会弄混与target
的区别。
先看下定义(参考JS高级程序设计):
- target:事件的目标
- currentTarget:其事件处理程序当前正在处理事件的那个元素
看完这两个定义,或许还是似懂非懂的感觉,我一直觉得实践是最好的验证方法,所以来写个极其简单的例子吧。
实例
html文件,写一个简单的列表1
2
3
4
5<ul>
<li>111</li>
<li>222</li>
<li>333</li>
</ul>
js文件1
2
3
4
5
6
7var aUl = document.getElementsByTagName('ul')[0];
aUl.addEventListener('click',function(event){
console.log(this);
console.log('target: ',event.target);
console.log('currentTarget: ',event.currentTarget);
},false)
当看到这个例子,你或许就明白我要说啥了。运行程序,会发现,target
指向你所点击的那个li
元素,而currentTarget
始终指向ul
元素。
所以,我可以用自己的话再来定义一下这两个属性了:
- target:指向触发事件的元素。上例中,是
li
触发的事件,冒泡到ul
上执行的 - currentTarget:指向添加事件的元素。很好懂啊,上例中,事件是绑定在
ul
上的
另外需要注意的是,this
始终等于currentTarget
,在上例中,始终指向ul
,不信的话也可以试下啊,我们将事件绑定到第二个li
上试试:1
2
3
4
5
6
7
8var aUl = document.getElementsByTagName('ul')[0];
var aLi = aUl.getElementsByTagName('li')[1];
aLi.addEventListener('click',function(event){
console.log(this);
console.log('target: ',event.target);
console.log('currentTarget: ',event.currentTarget);
},false)
结果就不用多说了。