通常情况下,事件处理程序在冒泡阶段运行。在这个例子中,注意当你在 <input>
中输入内容时会发生什么 —— 内部处理程序首先运行,因为事件从目标元素’冒泡’到文档,然后是外部处理程序。
有时候,你可能希望处理器在捕获阶段运行。只需在事件名称后面添加capture
:
App
<div onkeydowncapture={(e) => alert(`<div> ${e.key}`)} role="presentation">
<input onkeydowncapture={(e) => alert(`<input> ${e.key}`)} />
</div>
现在,相对顺序被颠倒了。如果对于给定的事件同时存在捕获和非捕获处理程序,捕获处理程序将首先运行。
1
2
3
4
<div onkeydown={(e) => alert(`<div> ${e.key}`)} role="presentation">
<input onkeydown={(e) => alert(`<input> ${e.key}`)} />
</div>