gpt4 book ai didi

javascript - 事件处理程序中的 setTimeout 似乎没有触发

转载 作者:行者123 更新时间:2023-11-28 15:48:02 26 4
gpt4 key购买 nike

我知道并不是所有放入队列的 setTimout 任务实际上都会被触发(感谢 bobnice 对此的帖子)。但我不明白为什么在这种情况下无法达到:

我将以下事件处理程序添加到 anchor 链接(通过 addEventListener( 'click', ... )来试验所谓的“运行中事件修改”:

var f = function(e) {  
e.preventDefault();
e.stopPropagation(); // capture first event
e2 = new MouseEvent("click",{metaKey:true}); // create second event where we hold meta
e.target.removeEventListener('click', f, false); // remove this handler so no stackoverflow
e.target.dispatchEvent(e2); // dispatch second event, a "modified" first event.
};

工作正常。

但是,早期版本有这样的:

setTimeout( 0, function () {
e.target.dispatchEvent(e2); // dispatch second event, a "modified" first event.
});

从处理程序内部(作为调试补丁,当我无法让removeEventListener工作时尝试避免堆栈溢出——我忽略了将我的函数f分配给变量)。

为什么这个setTimeout不执行?在我的少数测试中,它从未从第一个事件的监听器中执行第二个事件的调度。

显然,setTimeout 将 dispatchEvent 的执行上下文置于函数 f 的堆栈帧之外,因为 f 之前返回>dispatchEvent 触发。

或者更确切地说,触发。

我想确切地了解为什么它在以前版本的代码中没有触发。

最佳答案

setTimeout 的超时延迟应该是第二个参数,而不是第一个!这就是它没有火的原因。

关于javascript - 事件处理程序中的 setTimeout 似乎没有触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21540220/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com