mobile-safari - HTML 的最佳设置, 对于移动设备
问题描述
我一直在阅读许多其他问题,例如这些[1] [2] [3],但问题仍然存在。
我需要找到“最干净”的方式来input
为移动设备创建 HTML,并且尊重所有这三个规则:
我尝试了什么?
我遇到过这些解决方案,它们都没有累积地尊重上述三个规则。
解决方案 1
<input type="text" pattern="\d*" />
尽管该解决方案在 iOS 中工作并满足 W3C 验证器测试的 HTML 规则,但在 Chrome Android 中提供了带有 QWERTY 键盘的完整键盘。
解决方案 2
<input type="number" pattern="\d*" />
此解决方案适用于 iOS 和 Android Chrome 系统,在两个系统上都显示数字键盘,但它使用 W3C 验证器引发 HTML 验证错误:
仅当输入类型为电子邮件、密码、搜索、电话、文本或 url 时才允许使用属性模式。
解决方案 3
<input type="number" />
该解决方案通过了 W3C HTML 测试,在 Chrome 上显示不错,但在 iOS 键盘上显示了几个不需要的键
解决方案 4
我看到很多开发人员都在使用这个解决方案
<input type="tel" />
但是在 Android Chrome 中它不允许点符号.
(因此没有浮点数),并且键有字母,这是多余的
解决方案
对于您的特定任务,我有非凡的解决方案:我们采用最佳解决方案type="text"
和模式,然后添加更正类型属性的 JavaScript。我们这样做是为了通过 W3 验证器。
解决方案
// iOS detection from: stackoverflow.com/a/9039885 with explanation about MSStream
if(/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream)
{
var inputs = document.querySelectorAll('input[type="number"]');
for(var i = inputs.length; i--;)
inputs[i].setAttribute('pattern', '\\d*');
}
<input type="number" />
我的解决方案尊重您的所有三个规则(包括 W3 验证器)。
但我不得不提一下,在这种情况下(带有模式),在 iOS 上,我们无法使用数字键盘输入浮点数,因为在 iOS 上,我们没有任何带数字的键盘,包括点。在 Android 上,我们有这种可能性。如果您想使用带有浮点数的数字键盘,那么您必须为 iOS 编写额外的解决方案,如下所示:
<input type="number" />
推荐阅读
- python - Pylint 中的模块“PyQt5.QtWidgets”错误中没有名称“QApplication”
- python - 将所有像素的 RGB 值四舍五入以均匀着色
- ajax - 如何在数据库laravel中插入数据json?
- reactjs - this.setState 没有更新 state 属性
- java - 将 Spring Boot 后端超时设置为无限期
- python - Pillow - 改变每个像素的 RGB 值
- reactjs - 我有一个关于在单击时将 id 传递到我的详细信息路线的问题
- kubernetes - Tiller 每 30 秒超时,无法继续安装
- angular7 - 订阅许多承诺?
- javascript - 具有反应形式值的节点 js 过滤器数组