如何在Android的移动网站中用数字强制键盘


91

我有一个移动网站,其中有一些HTML input元素,如下所示:

<input type="text" name="txtAccessoryCost" size="6" />

我已经将该网站嵌入到一个WebView可能使用Android 2.1 的网站中,因此它也将是一个Android应用程序。

当此HTML input元素聚焦时,是否可以用数字键盘代替默认的带字母键盘?

或者,如果对于HTML元素不可行,是否可以为整个应用程序设置它(可能是清单文件中的内容)?


如果除了Android之外,还希望在iOS上使用数字键盘,则应执行以下操作:stackoverflow.com/a/31619311/806956
亚伦·格雷

2
inputmode="number"属性在2019年末似乎是正确的答案:developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/…。发表此评论时,投票率最高的答案表明type="number",这有其自身的陷阱。inputmode似乎只影响虚拟键盘的显示,而不影响输入本身的行为/约束。
SheffDoinWork,

Answers:


112
<input type="number" />
<input type="tel" />

当输入获得焦点时,这两个按钮都会显示数字小键盘。

<input type="search" /> 显示带有额外搜索按钮的普通键盘

其他一切似乎都带来了标准键盘。


今天将看一下它,然后告诉您是否可行。谢谢你,理查德!
ncakmak 2010年

1
嗨,理查德。无效,输入字段仍在打开标准键盘。
ncakmak 2010年


1
请注意,用于的数字键盘比用于的键盘type="tel"更差type="number"
罗里·奥肯

2
<input type="text" pattern="\d*" /> 也可以调出数字键盘,但只能在iOS上,而不能在Android上
罗里·奥肯

50

重要的提示

我将其发布为答案,而不是评论,因为它是非常重要的信息,它将以这种格式吸引更多关注。

正如其他人指出的那样,您可以使用type="number"/ 强制设备向您显示数字键盘type="tel",但我必须强调,您对此必须非常谨慎。

如果有人期望以零开头的数字(例如)000222,那么她可能会遇到麻烦,因为某些浏览器(例如台式机Chrome)将发送到服务器222,而这并不是她想要的。

关于type="tel"我不能说类似的话,但我个人不使用它,因为它在不同电话上的行为可能会有所不同。我将自己限制在pattern="[0-9]*"无法在Android中使用的简单位置上


4
使用可能不会发生自动重新格式化type="tel"规范指出,tel它不强制执行任何特定的语法,这与number要求其值必须是有效的浮点数有所不同。
罗里·奥肯

有多糟 我们正在努力为我们的移动客户加快表单处理过程,这似乎是一个显而易见的解决方案,但我们也需要可靠的东西。您发布了强烈反对使用此方法的警告。我想知道您是否可以对此进行详细说明?
Philll_t 2015年

@Philll_t,用户需要发送“ 000222”数据,但是您在服务器端会获得“ 222”。您没有看到功能被完全破坏吗?服务器收到错误的数据。
user907860 2015年

是的,我明白您的意思,但是我的意思是:看到此内容的用户百分比是多少?在Safari和Chrome等主要的移动浏览器上是否有此问题?您怎么知道这是一个问题,是否可以提供链接。我相信您,我只是想研究自己,还没有发现任何建议,也许您可​​以为我指明正确的方向。我们只是想看看我们的客户群是否不会从中受益。
Philll_t

1
@Philll_t我认为此警告的最佳示例是“出生日期”输入字段。您需要在其中手动输入日,月和年。是的,仍然有很多网站使用这种样式来代替常用的日期选择器。关于对出生输入字段的日期问题,就是当你输入你的天或月开始以“0”,如08
罗宾·卡罗Catacutan

8

这应该工作。但是我在Android手机上也遇到同样的问题。

<input type="number" /> <input type="tel" />

我发现,如果不包括jquerymobile-framework,那么键盘会在两种类型的字段上正确显示。

但是,如果您确实需要使用jquerymobile,我还没有找到解决该问题的解决方案。

更新: 我发现,如果表单标签存储在

<div data-role="page"> 

数字键盘未显示。这一定是个错误...


感谢您对此进行深入研究。我不确定我是否明白:“如果表单标签存储在div [data-role = page]之外”。在我的情况下,问题很好地嵌套在div [data-role = page]中。也许问题在于这些页面在我看来是作为对话框显示的?
Wytze 2012年


2

当输入类型为“数字”时,某些浏览器会向服务器发送前导零。因此,我混合使用jquery和html来加载数字小键盘,并确保该值以文本形式而不是数字形式发送:

$(document).ready(function(){
$(".numberonly").focus(function(){$(this).attr("type","number")});
$(".numberonly").blur(function(){$(this).attr("type","text")});
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" class="numberonly">


3
这会在Android版Chrome上引起恼人的问题。当你在输入点击,键盘也没有上来。然后,您必须第二次点击文本框,然后键盘确实带有仅数字键盘。我真的希望我们有一个type="digits"选择,这样我们就不必再遇到这些黑客了。我的意思是,这并不像零开头的数字那么罕见(美国的邮政编码是一个明显的例子)。
Jaxidian

2
我也面临同样的问题!将字段设置为“ type = tel”是最好的解决方案。
Ali Sheikhpour

-2

input type = number

当您要提供数字输入时,可以使用HTML5输入type =“ number”属性值。

<input type="number" name="n" />

这是iPhone 4上的键盘:

iPhone HTML5输入类型数字的屏幕快照Android 2.2使用此键盘输入type = number:

Android的HTML5输入类型编号的屏幕截图


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.