javascript - Firefox 在禁用输入时将上下文菜单事件直接传播到 DOM 根目录
问题描述
我正在尝试禁用上下文菜单。要做到这一点,我stopPropagation
和preventDefault
上body
。这工作正常,除了input
Firefox 中的禁用元素。
启用input
的元素正确地将事件冒泡到正文,但禁用的元素允许出现右键菜单。我确定该事件被直接发送到 DOM 更高的位置,但我尝试将侦听器附加到两者但document
没有window
运气。
document.body.addEventListener("contextmenu", e => {
e.preventDefault();
e.stopPropagation();
console.log("context menu blocked at body");
});
Array.from(document.querySelectorAll("input"))
.forEach(input => {
input.addEventListener("contextmenu", e => {
e.preventDefault();
e.stopPropagation();
console.log("context menu blocked at input");
});
});
body, html {
width: 100%;
height: 100%;
margin: 0;
}
<input type="text" value="I am disabled" disabled />
<input type="text" value="I am not disabled" />
我还尝试将阻塞事件侦听器添加到页面上的输入中。启用的按预期工作;残疾人的行为没有改变。
Chromium/Webkit 浏览器(Chrome、Safari、Brave)中似乎不存在这种行为。
有没有办法在禁用的输入元素上阻止 Firefox 中的上下文菜单? 是否有更高级别的 DOM 元素可以附加我的阻塞侦听器以捕获所有失败事件?
解决方案
虽然您不能在 Firefox 中禁用禁用输入的上下文菜单,但您可以使用 CSS 执行 99% 的相同操作,以完全阻止鼠标交互:
input:disabled{ pointer-events: none; }
推荐阅读
- android - 阻止我的应用的旧版本在 Google Play 上可用
- r - 表 1 函数中的 IQR、四分位数和 n
- python - Css 在本地工作但在服务器 Django 上不能正常工作?
- java - 如何显示属于正数、负数、奇数和偶数组的数字?
- node.js - Node Gui安装找不到Cmake
- angular - 显示额外页面的 ngx 分页
- javascript - discord.js - 检查语音频道中的 DB(分贝)
- warnings - 我们如何自定义 Spartacus 中的默认警告?
- c++ - 有什么办法可以去掉 C++ 程序中整数阶乘的最后一位数字中的“*”
- javascript - 为什么木偶动画比实时运行*快*?