JS事件对象中 target 和 currentTarget 的区别

JavaScript012

JS事件对象中 target 和 currentTarget 的区别,第1张

今天我们就来简单谈谈JavaScript的Event事件对象中 target 和 currentTarget 两者之间的区别吧~

我们知道,想要获取某事件所绑定的元素,通常我们可以直接使用 this 对象即可。比如:

稍微给它们加点样式:

页面效果如下:

其中绿色盒子 id 为 box ,而红色盒子 id 为 container ,绿盒子是红盒子的子元素。现在,我给它们分别添加点击事件,目的是获取它们的 id 属性。

可以看到,只要我们给哪个元素绑定点击事件,那么事件执行时通过 this 所获取到的元素就是绑定点击事件的那个元素。

但是,并不是任何时候我们都可以通过 this 来获取当前绑定事件元素,比如当我们使用箭头函数或使用Vue.js框架时, this 就“失效”了。

有关箭头函数为什么会导致 this 指向问题,请戳→ ES6之箭头函数 。

这里的 this 指向的是当前Vue组件实例,所以 this.id 自然获取的是 data 中的 id 而不是 container 了。

那么,对于这个问题我们该如何解决呢?如何才能正确获取到当前绑定事件元素呢?

这时我们就需要用到事件对象中的 target 和 currentTarget 属性了。

我们看到,通过 target 和 currentTarget 都成功获取到了点击事件所绑定的DOM元素,那么 target 和 currentTarget 之间又有什么区别呢?

其实,只要我们将事件处理程序直接绑定到目标元素,那么目标元素事件执行时, target 和 currentTarget 均指向的是该目标元素。然而,如果事件处理程序并未绑定在目标元素,而是在其祖先元素上时,那么 target 则指向的是该目标元素,而 currentTarget 指向的是当前绑定事件的祖先元素。

可能看起来比较难理解,我们还是用最开始那个例子吧。

此时,只要 foo() 执行,那么 e.currentTarget.id 的值必然是 container ,因为 currentTarget 永远指向的是 事件所绑定的元素 (这里点击事件直接绑定在container元素上)。

但是 target 则不同,它指向的是 事件实际执行所在的元素 ,所以本例中 e.target.id 的值取决于鼠标直接所点击的元素。

① 鼠标直接点击container元素,也就是红色部分

这时 target 和 currentTarget 均指向的是container元素,因为事件执行的目标和事件绑定的目标是相同的,都是container元素。

② 鼠标直接点击box元素,也就是绿色部分

这时 target 指向的是box元素,而 currentTarget 指向的是container元素,因为事件执行的直接目标是box元素。

document.getElementById('id选择器').keyup(function(e)){

e.keyCode

}

e.keyCode:这个就是获取的键码值

你也可以搜索键码值,每个键盘都有对应的

    开发中,当执行一个事件时需要去知道触发这个事件的对象是谁?那么,如何获取,在这里我就对 event.srcElement与event.target 操作获取略作区分 。

event.srcElement: 表示可以获取当前作用事件的对象。

event.target: 事件属性可返回事件的目标节点(触发该事件的节点),如生成事件的元素、文档或窗口。

兼容性:

event.target: Ie9+ 火狐、谷歌;

event.srcElement:ie 678;

srcElement 是 IE 下的属性

target 是 Firefox 下的属性

Chrome 浏览器同时有这两个属性

一、利用event.srcElement 获取标签:

event.srcElement.tagName :因为它获取出来的都是以 大写 的形式,例如(“A”,“DIV”)所以需要转换 obj.tagName.toLowerCase()="a"

二、 利用event.srcElement 获取子对象:

第一个子标签 :event.srcElement.firstChild

最后个一个是: event.srcElement.lastChild

第几个孩子: event.srcElement.children[i]

所有孩子: event.srcElement.children

所有孩子节点: event.srcElement.childNodes

三、利用event.srcElement 获取父对象:

.event.srcElement.parentElement; 可以理解成是在鼠标所在对象的上一个对象。

四、vent.target的 判断使用  

 js中事件是会泡的,event.target它永远是直接接受事件的目标DOM元素  

一般是获取这个对象的id,兼容的写法如下:

var targetId = event.target ? event.target.id : event.srcElement.id

获取id后再拿到事件中去判断。

谢谢观读~

��