Javascript e、 preventDefault()在100%的情况下不工作

Javascript e、 preventDefault()在100%的情况下不工作,javascript,addeventlistener,preventdefault,Javascript,Addeventlistener,Preventdefault,我正在尝试禁用网页上的每次单击事件 只需在控制台中复制/粘贴此代码: document.addEventListener("click", function (e) { e.preventDefault(); e.stopImmediatePropagation(); let clicked = e.target; console.log(clicked); }); 这应该可以防止每次点击事件,对吗?但我仍然发现它被忽略的情况(主要是链接

我正在尝试禁用网页上的每次单击事件

只需在控制台中复制/粘贴此代码:

document.addEventListener("click", function (e) {
    e.preventDefault();
    e.stopImmediatePropagation();
    let clicked = e.target;
    console.log(clicked);
  });

这应该可以防止每次点击事件,对吗?但我仍然发现它被忽略的情况(主要是链接)。我遗漏了什么?

这里的问题是在什么阶段事件被处理程序(或拦截)处理。您问题中的代码是针对在传播的最后阶段出现在
文档
中的事件(其传播未被文档树下的元素停止的事件)执行的,而不是针对
文档
上发生的所有事件(您所关注的内容)

在您的情况下,您实际上希望停止所有事件的执行-请参阅第3.1节(事件传播的第一阶段)

true
添加到要在捕获阶段执行的调用中:

document.addEventListener(“单击”),函数(e){
// ...
},对);

您还应该只需要处理程序中的
e.stopImmediatePropagation()

您可以尝试在末尾添加
true
,true)
以便在捕获阶段而不是冒泡阶段调用处理程序。此“停止”单击冒泡一直到文档根元素的事件。这不会阻止事件处理程序或元素以这种方式对“click”作出反应。不,它只会阻止
文档上的click事件执行任何操作。该事件在冒泡到这么高之前已经完成了正常的操作。@blex看起来很有效!谢谢man@ozgur基于一些测试和测试,我相信这里使用的
e.stopImmediatePropagation()
应该足够了。除了阻止执行元素上的任何附加处理程序外,此方法还通过隐式调用event.stopPropagation()停止冒泡