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

Bap*_*aud 4 javascript addeventlistener preventdefault

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

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

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

我缺少什么?

Tho*_*mas 7

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

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

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

document.addEventListener("click", function (e) {
 // ...
}, true);
Run Code Online (Sandbox Code Playgroud)

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