### [HTML 的 oncontextmenu 事件怎么拦截并完美替换为自定义右键](https://www.huociguo.com/article/1450)
**Published:** 2026-09-27T03:46:50
**Author:** 米了
**Excerpt:** 自定义右键只有一条正路: ,并在回调第一行同步调用 。这活儿的关键从来不是"能不能拦",而是"拦得及不及时"。…
自定义右键只有一条正路:`addEventListener('contextmenu', handler)`,并在回调第一行同步调用 `event.preventDefault()`。这活儿的关键从来不是”能不能拦”,而是”拦得及不及时”。

HTML oncontextmenu 拦截原生右键,实现自定义右键菜单,含完整实现逻辑与示例代码。
## 内联属性为什么靠不住
很多人上来就写 `oncontextmenu="return false"`,看着一行搞定,实际三个硬伤:
- 内联绑定,运行期间没法动态开关;
- 不支持事件委托,列表里新增的节点绑不上;
- 在 Vue / React 里直接失效——JSX 的 `onContextMenu={() => false}` 拦不住默认行为,菜单照弹。
**顺带避个坑:**别图省事监听 `document` 再用 `e.target.matches()` 过滤目标。子元素容易匹配漏,``、`