如何将新函数绑定到元素的 onclick 事件,并使其在所有其他绑定函数之前运行

How to bind a new function to an element's onclick event and have it run before all other bound functions

本文关键字:绑定 函数 运行 其他 onclick 新函数 元素 事件      更新时间:2023-09-26

我们希望使用浏览器扩展为现有页面添加功能。假设元素已经具有绑定到其 onclick 事件的函数。我正在将一个新函数绑定到该元素的onclick。我想让我的函数在之前绑定到该事件的所有其他函数之前运行。在我的函数完成运行之前,我不希望它们开始执行。

我想知道如何在 JavaScript 中以这种方式绑定我的新函数。

你真的不能。事件侦听器通常按照它们附加到元素的顺序执行,您无法获取已添加的侦听器。如果您的插件不会在任何其他添加侦听器的代码之前执行,那么您唯一的机会就是尽早进入事件调度过程。

我能想到的最好的方法是在dom的最高点为捕获阶段添加一个侦听器:

document.documentElement.addEventListener("click", function(e) {
    if (e.target == theElementInQuestion) // or check for e.target.id...
        // do something with the event like
        e.stopImmediatePropagation();
}, true /* sic! */);