事件:currentTarget 属性

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

注意:此功能在 Web Workers 中可用。

Event 接口的只读属性 currentTarget 用于标识事件处理程序已附加到的元素。

这并不总是与触发事件的元素相同,因为事件可能在一个带有处理程序的元素的后代上触发,然后 冒泡 到带有处理程序的元素上。触发事件的元素由 Event.target 提供。

请注意,currentTarget 的值仅在事件的处理程序中可用。在事件处理程序之外,它将为 null。这意味着,例如,如果您在事件处理程序中获取了 Event 对象的引用,然后在事件处理程序之外访问其 currentTarget 属性,其值将为 null

一个代表当前事件处理程序已附加到的对象的 EventTarget

示例

currentTarget 与 target

此示例说明了 currentTargettarget 之间的区别。

HTML

页面上有一个包含“子”<div> 的“父”<div>

html
<div id="parent">
  Click parent
  <div id="child">Click child</div>
</div>

<button id="reset">Reset</button>
<pre id="output"></pre>

JavaScript

事件处理程序已附加到父级。它会记录 event.currentTargetevent.target 的值。

我们还有一个“重置”按钮,用于重新加载示例。

js
const output = document.querySelector("#output");
const parent = document.querySelector("#parent");
parent.addEventListener("click", (event) => {
  const currentTarget = event.currentTarget.getAttribute("id");
  const target = event.target.getAttribute("id");
  output.textContent = `Current target: ${currentTarget}\n`;
  output.textContent += `Target: ${target}`;
});

const reset = document.querySelector("#reset");
reset.addEventListener("click", () => document.location.reload());

结果

如果您单击子 <div> 内部,则 target 标识子级。如果您单击父 <div> 内部,则 target 标识父级。

在这两种情况下,currentTarget 都标识父级,因为处理程序已附加到该元素。

规范

规范
DOM
# ref-for-dom-event-currenttarget②

浏览器兼容性

另见