【问题标题】:JavaScript: block backspace on text input on AndroidJavaScript:在 Android 上阻止文本输入的退格键
【发布时间】:2026-01-21 14:15:01
【问题描述】:

我正在尝试使用 jQuery 阻止 html 文本字段上的所有输入。以下解决方案适用于桌面浏览器:

that.input.keydown(function (e) {
    e.preventDefault();
    e.stopPropagation();
    e.stopImmediatePropagation();
    return false;
});

但是,虽然它会阻止常规输入,但无法阻止 Android (Chrome) 上的退格键。我也尝试过阻止 keyup 和 keypress 事件,但这没有帮助。我不想设置只读属性,因为我打算在某些情况下允许输入。

对此有什么干净的解决方案吗?提前致谢!

【问题讨论】:

  • “我不想设置只读属性,因为我打算在某些情况下允许输入。”你为什么不改变readonly的值关于那些“某些情况”
  • 我不能,因为这将在您键入时确定。如果我设置只读属性,光标会消失,手机上的虚拟键盘也会消失。

标签: javascript


【解决方案1】:

现实情况是安卓键盘不是键盘。在android中打开文本字段时,文本字段所有者应用程序和键盘应用程序,简单地说,是共享一个资源,即文本字段内容。键盘应用程序接收文本字段的全部内容,然后在本地进行编辑(包括删除)并通过 DeleteSurroundingText(用于简单删除非文本内容,即空格)或 setComposingRegion/setComposingText 等调用推送到应用程序以更改单词.这意味着自动更正可以对已经存在的单词起作用。

有些 Android 键盘会生成到达 Chrome 的按键事件,有些则不会。有时生成按键事件是没有意义的 - 如果一个单词被自动更正,应该发送什么按键?

当您正在寻找要显示的键盘和光标但该字段在稍后之前保持不可编辑时,我建议您实现某种 onChange/Revert 循环。

Detect all changes to a <input type="text"> (immediately) using JQuery

【讨论】:

    【解决方案2】:

    显然 android 键盘的键盘有一个奇怪的错误,所以不要附加到 keydown 事件,而是尝试oninput 事件。

    我在这里Capture keys typed on android virtual keyboard using javascript找到了更多关于这个问题的信息

    【讨论】:

    • 很遗憾,此活动不可取消。我可以用它来捕捉按键,但我不能阻止它。可取消事件(如 keydown)可以阻止所有输入,但在 Android 上它们会因退格而失败。
    • 也许将输入重置为最后一个值?
    • 看起来它可能最终成为唯一的解决方案。我希望可能还有其他我没有看到的东西。嗯,还是谢谢你的帮助!
    最近更新 更多