我发现了一些很奇怪的事情,在所有主流浏览器中,上下文菜单事件对禁用的元素不起作用,所以这不会打印到控制台:
<button
type="button"
onContextMenu="console.log(123)"
disabled
>
Click me
</button>
但是React有点不同,我尝试通过React组件做同样的事情:
const MyComponent = () => (
<button
type="button"
onContextMenu={() => console.log(123)}
disabled
>
Click me
</button>
);
这一次,在Chrome浏览器中,它会打印到控制台,但在其他浏览器中却不会。出于教育目的,我试图理解HTML的onContextMenu
和React的onContextMenu
之间的区别,以及为什么只有Chrome处理它的方式不同。超级奇怪。
在Codesandbox中复制
1条答案
按热度按时间db2dz4w81#
我花了一段时间来研究这个问题,它看起来像是Chrome中的一个bug,尽管
contextmenu
是PointerEvent
的一种,但它只在冒泡时触发禁用的元素 *。下面是一个没有React的JSFiddle:https://jsfiddle.net/bpe0yoc6/4/
React在DOM树的根目录注册事件句柄,这就是这样做的原因:
将不会触发禁用按钮,
oncontextmenu
也不会。我在Chromium问题跟踪器上打开了一个问题:https://bugs.chromium.org/p/chromium/issues/detail?id=1421370