【发布时间】:2016-09-22 21:28:15
【问题描述】:
考虑:
let sel=document.getElementById('mys');
sel.onchange=function(e) {
console.log(e.currentTarget===null); // false
setTimeout(e => {
console.log(e.currentTarget===null); // true
}, 0, e);
}
<select id="mys">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
为什么 e.currentTarget 在超时后会发生变化?这是浏览器(chrome)的错误吗?
如何将事件的精确克隆传输到超时函数?我尝试了简单的克隆,但 currentTarget 不可写并且不能被覆盖..
【问题讨论】:
-
只对可运行代码使用sn-ps
-
看起来你需要关闭:jsfiddle.net/vrfv6gy7
-
有趣,这是一个闭包吗?我认为闭包根本不会将 e 传递给 setTimeout ...您正在做的是 IIFE 吗?为什么会这样?
-
from MDN: “[Event.currentTarget] 标识事件的当前目标,因为事件遍历 DOM”。这不是静态属性。在事件完成冒泡后,它的计算结果将是
null,这是有道理的。尝试改用event.target。 (只评论而不是回答,因为我不知道我是否正确。)
标签: javascript html