【问题标题】:How to ignore all keyboard events on Chrome for Android?如何忽略 Chrome for Android 上的所有键盘事件?
【发布时间】:2018-05-27 06:02:36
【问题描述】:

在任何桌面浏览器上都很容易。我只听keydowndocumentwindow,然后打电话给preventDefault,就像答案herehere 一样。

我通常使用这样的东西,所以就像忽略所有键盘输入:

window.addEventListener('keydown', function(e){
    e.preventDefault();
    e.stopPropagation();
    e.stopImmediatePropagation();
}, true);

但它们不适用于我的 Android 平板电脑。 (在适用于 Android 的 Chrome 63.0.3239.83 和 Firefox 57.0.1 上测试)


这是典型的场景:我有一个 <input> 作为当前活动元素,然后我需要执行一些 JavaScript 来冻结用户界面,以便忽略所有用户输入。


我在这个问题上浪费了很多时间,但仍然找不到适用于我的 Android 平板电脑的解决方法。

我考虑了其他一些方法,比如将焦点更改为另一个元素,或者将元素的readOnly 设置为true。但有一些警告。调用focus() 会触发先前聚焦元素的onblur。设置readOnly 不会阻止焦点元素的事件侦听器触发(例如,<input> 的任何keydownkeyup 处理程序),有时回车键会变成允许用户跳转到下一个的键页面上的输入字段。

有没有一种方法可以忽略 Android 版 Chrome 上的所有键盘输入而不会产生不良副作用?

【问题讨论】:

    标签: javascript android browser keyboard dom-events


    【解决方案1】:

    最后我调用window.addEventListener 来为keydownblurfocus 附加相同的处理程序(问题中使用的函数),然后调用document.documentElement.focus()。 (需要将tabindex="0"添加到<html>

    这样就避免了触发之前关注的元素onblur的问题,问题中提到了。

    (请注意,blurfocus 不是可取消的事件,因此处理程序仅用于在此处停止传播。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-13
      • 2010-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多