【问题标题】:Text inputs' strange behavior on Chrome for AndroidAndroid 版 Chrome 中文本输入的奇怪行为
【发布时间】:2019-07-04 20:41:05
【问题描述】:

我正在开发一个包含一组文本输入的小型应用程序,每个输入只适合一个字符,所有输入一起应该表现得像一个。所以,当一个输入被一个字符填充时,下一个输入应该被突出显示,就像输入的插入符号一样。同样的,当你清空一个输入时,它应该表现得像一个普通的字符删除,并且应该突出显示previous输入。

你可以在这里看到我的作品:https://codepen.io/Vitaozim/full/vqaRQY

示例:

这是我的做法:

  • 当任何输入元素聚焦时,它的全部内容是 突出显示,以确保它接收到的任何输入都会改变其整体 价值。
  • 每当在任何输入元素中触发input 事件时, 其中一种可能会发生:

    • 如果输入的新值不为空,则聚焦下一个输入元素。如果它接收到一个超过 1 个字符的值,代码将修剪字符串并只保留最后一个字符。
    • 否则,该值会以编程方式更改为一个空格,并聚焦前一个输入元素。该值被更改为一个空格,这样每当输入再次聚焦时,就会有一些内容被突出显示然后删除,从而触发“退格”条件。

问题是,它可以在以下浏览器上完美运行:

  • 适用于 Mac 和 iPhone 的 Chrome
  • 适用于 Mac 和 iPhone 的 Safari
  • Firefox for Mac、iPhone 和 Android

但它在 Android 版 Chrome 上存在问题。我在许多不同的设备上对其进行了测试。 “退格模拟”错误和输入值未在焦点上突出显示。

我进行了一些测试,我注意到如果我在 setTimeout 100 毫秒之后设置选择,它会起作用。这就像我覆盖了浏览器的默认行为......但这仍然是一个非常奇怪的行为,因为它只发生在“退格”模拟中。任何其他输入焦点的情况都不会有这个错误。

【问题讨论】:

    标签: javascript jquery html input chrome-for-android


    【解决方案1】:

    这似乎是 Chrome 的常见问题。您应该可以使用以下内容。

    setTimeout(function() {}, 0);
    

    其他 StackOverflow 答案表明这是 Chrome / Chromium 中的一个已知错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-05
      • 2014-06-25
      • 2018-02-22
      • 1970-01-01
      • 1970-01-01
      • 2019-03-17
      • 1970-01-01
      相关资源
      最近更新 更多