Skip to content

Commit 4339cf8

Browse files
committed
docs(events): edit event.md/event.currentTarget
1 parent bf0fbfd commit 4339cf8

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

docs/events/event.md

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -114,23 +114,30 @@ if (event.defaultPrevented) {
114114

115115
### Event.currentTarget,Event.target
116116

117-
`Event.currentTarget`属性返回事件当前所在的节点,即正在执行的监听函数所绑定的那个节点
117+
事件发生以后,会经过捕获和冒泡两个阶段,依次通过多个 DOM 节点。因此,任意时点都有两个与事件相关的节点,一个是事件的原始触发节点(`Event.target`),另一个是事件当前正在通过的节点(`Event.currentTarget`)。前者通常是后者的后代节点
118118

119-
`Event.target`属性返回原始触发事件的那个节点,即事件最初发生的节点。事件传播过程中,不同节点的监听函数内部的`Event.target``Event.currentTarget`属性的值是不一样的,前者总是不变的,后者则是指向监听函数所在的那个节点对象。
119+
`Event.currentTarget`属性返回事件当前所在的节点,即事件当前正在通过的节点,也就是当前正在执行的监听函数所在的那个节点。随着事件的传播,这个属性的值会变。
120+
121+
`Event.target`属性返回原始触发事件的那个节点,即事件最初发生的节点。这个属性不会随着事件的传播而改变。
122+
123+
事件传播过程中,不同节点的监听函数内部的`Event.target``Event.currentTarget`属性的值是不一样的。
120124

121125
```javascript
122-
// HTML代码为
126+
// HTML 代码为
123127
// <p id="para">Hello <em>World</em></p>
124128
function hide(e) {
125-
console.log(this === e.currentTarget); // 总是 true
126-
console.log(this === e.target); // 有可能不是 true
127-
e.target.style.visibility = 'hidden';
129+
// 不管点击 Hello 或 World,总是返回 true
130+
console.log(this === e.currentTarget);
131+
132+
// 点击 Hello,返回 true
133+
// 点击 World,返回 false
134+
console.log(this === e.target);
128135
}
129136

130-
para.addEventListener('click', hide, false);
137+
document.getElementById('para').addEventListener('click', hide, false);
131138
```
132139

133-
上面代码中,如果在`para`节点的`<em>`子节点上面点击,则`e.target`指向`<em>`子节点,导致`<em>`子节点(即 World 部分)会不可见。如果点击 Hello 部分,则整个`para`都将不可见
140+
上面代码中,`<em>``<p>`的子节点,点击`<em>`或者点击`<p>`,都会导致监听函数执行。这时,`e.target`总是指向原始点击位置的那个节点,而`e.currentTarget`指向事件传播过程中正在经过的那个节点。由于监听函数只有事件经过时才会触发,所以`e.currentTarget`总是等同于监听函数内部的`this`
134141

135142
### Event.type
136143

0 commit comments

Comments
 (0)