e.preventDefault() 在 100% 的情况下不起作用

e.preventDefault() not working in 100% cases

我正在尝试禁用网页上的所有点击事件。

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

这应该可以防止每次点击事件吧?但我仍然发现它被忽略的情况 (主要是链接).

我错过了什么?

这里的问题是事件在哪个阶段被您的处理程序captured(或拦截)。您问题中的代码正在针对在最后阶段 冒泡到 document 的事件(其传播未被文档树下方的元素停止的事件)执行传播,不是 document 发生的所有事件(你想要的)。

在您的情况下,您实际上想要停止所有事件的执行 descendants during the "capture" phase - 查看第 3.1 节 -(事件传播的第一阶段)。

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

document.addEventListener("click", function (e) {
 // ...
}, true);

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