<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>currentTarget</title>
</head>
<body>
<ul id='container' onclick="handleClick(event)">
<li id='first'>1</li>
<li id='second'>2</li>
<li id='third'>3</li>
</ul>
<script>
function handleClick (ev) {
console.log(ev)
console.log(ev.currentTarget)
}
</script>
</body>
</html>
例如,点击2时,打印结果分别为:
为什么会出现这种现象呢?
这是因为currentTarget 只能用于事件正在处理过程中,当回调结束,会被重新赋值。
用异步可以明显看到这一现象:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>currentTarget</title>
</head>
<body>
<ul id='container' onclick="handleClick(event)">
<li id='first'>1</li>
<li id='second'>2</li>
<li id='third'>3</li>
</ul>
<script>
let e
function handleClick (ev) {
console.log('ev1', ev)
console.log('currentTarget1', ev.currentTarget)
e = ev
setTimeout(function () {
console.log('ev2', e)
console.log('currentTarget2', e.currentTarget)
},100)
}
</script>
</body>
</html>
打印结果:
currentTarget 同样是 null,因为当读取 currentTarget 属性时,事件处理已经结束了被重新赋值了。