【问题标题】:input type=number not possible to insert negative numbers on mobile phone输入类型=数字不能在手机上插入负数
【发布时间】:2014-03-07 19:30:52
【问题描述】:

我正在我的手机(带有 chrome 的三星 Galaxy Note II)上测试我的应用程序,但我遇到了数字输入字段的问题。

在我的应用程序中,这些字段可以接受负数,在浏览器上一切都很好,因为我有 - 按钮以及用于选择数字的箭头滑块(来自 html5)。

在手机上虽然没有渲染滑块,浏览器识别输入类型=数字,只是渲染一个简化的数字键盘,不包含-符号,所以我没有看到方法插入我希望的负数。

我的应用程序使用带有 jquery 的 twitter bootstrap 2.3.2,我不知道如何解决这个问题。

这是我的一个输入字段的代码,它可以在我的计算机上正常工作,但无法在我的手机上正确使用:

<input class="input-mini" data-type="distance_price" id="distance" label="false" name="distance" step="0.1" type="number" max="-0.1">

在图像中,您可以看到红色字段如何被标记为错误,因为它需要为负数,但我的键盘不允许我插入符号。包括- 符号。 任何线索?

【问题讨论】:

  • 您应该始终将电话号码作为字符串而不是实际数字来处理,因为它们是由数字(可能还有其他符号,例如 +)而不是数字组成的 字符串。我对android开发一无所知,但是如果您将数据类型更改为字符串,这有帮助吗?
  • @Max Williams:你听说过否定电话号码吗?也许你应该再读一遍这个问题......
  • 刚刚在带有 Android 4.4.2 的 Nexus 4 和带有 Goggle 标准键盘和 Swiftkey 键盘的 Chrome 版本 32.0.1700.99 上进行了测试,两者都可以正常工作。也许这是具有“旧”Android/Chrome 版本的“旧”设备的问题?如果事实证明这是问题所在,那么您可能应该使用纯字符串输入字段使用@MaxWilliams Workaround。
  • 在 Nexus 上为我工作。这似乎是某些类型的 Android 浏览器的缺陷,您始终可以为滑块实现 Javascript 后备。
  • @morten,我的手机很新,肯定比 80% 的智能手机用户更新,它必须是手机/浏览器/操作系统的特定组合,我需要处理,否则我会失去这样的用户。也许是的,这可能是一个解决方案,在手机上这些字段变成文本,但是我必须在本地实现所有逻辑来验证字段。

标签: javascript android ruby-on-rails html twitter-bootstrap


【解决方案1】:

制作一个额外的输入字段。 “符号”复选框,选择自然或负整数。

然后挂钩复选框的 onchange 事件,以便您更新数字视图以反映所选符号。

【讨论】:

    【解决方案2】:

    问题is specific to Samsung custom keyboard - 向那些认为自己比所有人都聪明的供应商致敬。这是another example工作中的这个问题

    【讨论】:

      【解决方案3】:

      简而言之,没有办法让减号显示在三星 Android 数字输入上。以下是我遇到的一些解决方法:

      1) 谷歌键盘

      用户可以安装不同的键盘(如Google Keyboard)。显然,让人们安装一些东西并不理想。

      2) 取消按钮

      正如@Cris 已经建议的那样,添加一个按钮来否定该值。如果你有屏幕空间,那就太好了。

      3) 双点技巧

      我们最终得到了一个相当丑陋的解决方法,用户可以按两次.,它会否定这个数字。完全不可发现,但我们无法选择额外的按钮。

      https://gist.github.com/bendytree/936f6b9b4c0e10138b7e9158b5fd05d9

      【讨论】:

        【解决方案4】:

        如果您使用 value 属性 (value="-0.1") 加载初始负值,那么您将预先加载负号。

        <input class="input-mini" data-type="distance_price" id="distance" label="false" name="distance" step="0.1" type="number" max="-0.1" value="-1">
        

        【讨论】:

          【解决方案5】:

          如果您返回这里是因为上面的双点技巧停止工作...似乎对输入 type="number" 字段处理方式的更新使第二个“点”甚至无法注册为停止双点的击键从工作。就我而言,我将 JS 中的测试行更改为

          if (lastkey === "." && (key === "." || e.originalEvent.inputType == "deleteContentBackward")){
          

          创建同样骇人听闻的“点退格技巧”

          【讨论】:

            猜你喜欢
            • 2019-04-23
            • 1970-01-01
            • 2011-10-21
            • 2015-10-13
            • 1970-01-01
            • 1970-01-01
            • 2018-01-29
            • 2017-12-04
            • 1970-01-01
            相关资源
            最近更新 更多