浏览器开发工具:如何找出元素的事件上下文

Browser devtools: How to figure out the element's event context

我正在弄清楚 React 文档页面的搜索功能是如何工作的:https://reactjs.org/ .

我知道他们使用 DocSearch 但我想知道幕后发生了什么。

目前我想知道当我在搜索栏中输入任何内容时会发生什么。这是我在 Chrome 开发工具中得到的:

火焰图:

来源window(查看调用堆栈)

使用火焰图和调用堆栈显示事件期间调用了哪些函数,以及触发了哪些事件(在此示例中,Event:keypress -> Event:textinput -> Event:input -> function call)

问题是,我如何知道 DOM 的哪个元素使用 devtools 触发了事件?我通过查看源代码知道它是 #algolia-doc-search 触发的 input 事件,但我想知道一种更方便的方法来跟踪 DOM 事件。

谢谢!

以防万一,Firefox 开发版也无济于事。

Chrome 和 Firefox DevTools 都提供了一种简单的方法来停止在 DOM 事件上执行脚本。他们称此功能为 "Event Listener Breakpoints".

在 Chrome DevTools 这个 can be found in the Sources panel:

Firefox DevTools 中的功能是 located in the Debugger panel:

一旦你检查了你想要监听的事件,触发它们将停止脚本执行并直接跳转到事件发生的行。他们还在右侧面板中提示发生了什么事件。

在 Chrome 中看起来像这样:

在 Firefox 中非常相似:

要获取触发事件的元素,请检查 Scope 面板。在那里您可以看到当前执行上下文中可用的所有变量。那里的 this 范围指的是目标元素。或者,您可以展开事件变量(在示例中为 e)并搜索 target 属性。

这是 Chrome 中的样子:

同样,在 Firefox 中非常相似:

专业提示:悬停元素会在页面中突出显示它。您还可以在 Elements/Inspector 面板中 select 通过右键单击元素并 selecting 在元素面板中显示 (Chrome) 或单击它旁边的目标图标 (Firefox)。