javascript - 防止在 Android/chrome 移动设备上输入文本键盘 [web]
问题描述
我有一个带有 keyDown 监听器的文本区域
<textarea onKeyDown={handleKeyDown}></textarea>
和 handleKeyDown 函数:
const handleKeyDown = event => event.preventDefault()
当我从 Windows PC 输入时,Chrome 版本 90.0.4430.212(官方版本)(64 位)一切正常:文本没有出现在 textarea 中。
当我在 mac 上打字时,chrome 90 也一切正常。
但是当我拿起我的 Android 手机(三星,Android 11),打开 Mobile Chrome(90.0.4430.210)并开始输入时,文本出现在 textarea 中。最糟糕的是,我发现的关于这个错误的唯一提及是这个问题,当我将我的问题标记为重复时,机器人会引用它。没有答案:maxlength 属性不再起作用。
这是我试图阻止移动 chrome 输入的内容列表:
- Maxlength = 0(完全没有影响)
- 只读(=禁用,我需要焦点和选择)
- 阻塞 onKeyUp、onKeyPress、onPaste、onCut、onInput
我还尝试将 textarea 的值手动设置为 '' 但如果我设置了一个执行此操作的侦听器,我的 textarea 就会完全损坏:每次我按下键盘上的键时,它都会复制所有以前的内容。
我的问题是如何防止输入,也许有黑客或技巧?请不要将我发送到可能讨论此错误或其他问题的 android 报告论坛...
解决方案
添加事件侦听器时,我会首先检查事件是否正常工作。Android上一定有办法处理关键事件:
<textarea id="mytextarea"></textarea>
let mytextarea = document.getElementById('mytextarea');
mytextarea.addEventListener('keydown', (event) => {
console.log(event.code);
});
如果这不起作用;你要求一个黑客或技巧:尝试焦点和模糊事件,然后你可以在间隔上运行一个清除文本区域的函数。请注意,这种阻塞技巧违背了良好的用户体验约定,因此肯定应该被视为一种 hack/trick ;-)
<textarea id="mytextarea"></textarea>
let int1;
let mytextarea = document.getElementById('mytextarea');
mytextarea.addEventListener('focus', () => {
clearInterval(int1);
int1 = setInterval(() => {
mytextarea.value = '';
}, 10)
});
mytextarea.addEventListener('blur', () => {
clearInterval(int1);
});
推荐阅读
- reactjs - 为什么我不能在我的 React 应用程序中安装 BUILD 文件夹?
- continuous-integration - Github 操作停留在“正在启动工作流运行”
- python - Google Vertex AI AutoML - 无法为 CSV 数据集指定架构
- javascript - 检测 JavaScript 何时重新打开?
- android - 什么是 MediaCodecInfo.CodecProfileLevel?那有什么用
- loops - Ansible 循环一个列表超过 2 个列表
- angular - 角垫底板和垫滑块不工作
- python - 如何在一个脚本中编写多个 MFRC522 标签?
- docker - NVIDIA Docker CUDA>=11.0 没有用于 Ampere GPU 上的内核分析的 NSight 计算 Cli
- javascript - 如果用户未登录,如何在前端触发按钮