Javascript 2秒后删除单击事件的preventDefault()

Javascript 2秒后删除单击事件的preventDefault(),javascript,events,settimeout,preventdefault,Javascript,Events,Settimeout,Preventdefault,我有一个preventDefault()方法,我想在2秒钟后删除一些链接 我正在努力解决如何删除preventDefault()——它会停止链接的工作,但也要解决如何在2秒钟后删除它 我想我可以通过删除最初forEach循环所使用的“link”类来实现,但可惜这不起作用 有人知道如何解决这个问题吗 代码笔: var-link=document.querySelectorAll(“.link”); //防止所有特定链接上出现默认值 link.forEach(功能(项目){ item.addEve

我有一个preventDefault()方法,我想在2秒钟后删除一些链接

我正在努力解决如何删除preventDefault()——它会停止链接的工作,但也要解决如何在2秒钟后删除它

我想我可以通过删除最初forEach循环所使用的“link”类来实现,但可惜这不起作用

有人知道如何解决这个问题吗

代码笔:

var-link=document.querySelectorAll(“.link”);
//防止所有特定链接上出现默认值
link.forEach(功能(项目){
item.addEventListener(“单击”,函数(e){
e、 预防默认值();
});
});
//删除防止默认值
函数allowLinks(){
link.forEach(功能(项目){
item.classList.remove(“链接”);
});
}
setTimeout(函数(){
允许链接();
}, 2000);
正文{
保证金:0;
显示器:flex;
对齐项目:居中;
证明内容:中心;
宽度:100%;
高度:100vh;
}

在这种类型的场景中,我将依赖类来表示状态:

var root=document.querySelector(“”;//e、 g.导航、邮政
root.addEventListener(“单击”,函数(e){
if(例如target.classList.contains(“链接”)){
e、 target.classList.remove(“链接”);
设置超时(()=>{
e、 target.classList.add(“链接”);
}, 2000);
}否则{
日志(“取消单击:”,即目标);
返回e.preventDefault();
}
});

删除
链接
类不会实现您的目标,因为事件侦听器与DOM元素关联,而不是与类关联。换句话说,类名是访问DOM元素的方法,但类本身与事件侦听器没有关联

一个选项是在两秒钟后删除事件侦听器本身。可以通过在更高的范围内定义事件侦听器函数和使用
removeEventListener
方法来实现这一点

var-link=document.querySelectorAll(“.link”);
常量侦听器=函数(e){
e、 预防默认值();
};
//防止所有特定链接上出现默认值
link.forEach(功能(项目){
item.addEventListener(“单击”,侦听器);
});
//删除防止默认值
函数allowLinks(){
link.forEach(功能(项目){
item.removeEventListener(“单击”,侦听器);
});
}
设置超时(()=>{
log(“允许链接!”);
允许链接();
}, 2000);
正文{
保证金:0;
显示器:flex;
对齐项目:居中;
证明内容:中心;
宽度:100%;
高度:100vh;
}

这不起作用-尽管这可能是因为您缩短了代码,这让我很困惑。您放置的初始
是否应该是
链接
变量?啊,经过检查,我已经做了一些更正…嗨@nick-我最初确实尝试过removeEventListener(),但我是作为项来做的。removeEventListener(“单击”,函数(e){e.preventDefault());在allowLinks()函数中,它不起作用。您知道为什么只有将该函数分配给变量/常量时它才起作用吗?是的,您删除的事件侦听器必须与初始事件侦听器具有引用相等性。