<input type =“ number” />在iOS上未显示数字键盘


72

根据Apple的文档,当我设置类型为numberI的输入元素时,我应该得到一个数字键盘。

<input type="number"/>

number:用于指定数字的文本字段。在iOS 3.1及更高版本中启动数字键盘。

看起来该死的几乎不可能搞乱。但是,当我在iPhone或模拟器(均为iOS6)上查看此简单提琴时,数字键盘没有出现,而是使用标准字母键盘。

http://jsfiddle.net/Cy4aC/3/

我到底可能在这里搞砸了什么?

在此处输入图片说明


作为参考,我的基于Android的手机也可以做到这一点。谢谢你问这个。+1
Niet the Dark Absol 2013年

Answers:


134

您需要指定模式:

<input type="number" pattern="\d*"/>

由于anumber可以是负数或带浮点,因此-and.,应该在键盘上可用,除非您指定仅数字模式。

在此处输入图片说明


1
是! 谢谢。苹果文档似乎并不准确。它说:type="number" “指定输入类型\ d *或[0-9] *等同于使用此类型。” 这似乎并非全部。它称它为错误的东西(类型!=模式),并声称当两者都需要具有上述效果时,它们是多余的...哦,苹果:(
亚历克斯·韦恩

7
我在React中使用JSX语法,并且不得不使用两个反斜杠,例如:<input type="number" pattern="\\d*" />
styfle

2
确实可以,但是看起来数字字段不应该支持模式。developer.mozilla.org/zh-CN/docs/Web/HTML/Element/input/…–
Antfish

1
可以确认,W3C验证器向我抛出了错误;输入类型需要为文本
aexl

3
工作正常,但不显示十进制(。)按钮,知道要怎么做吗?如果输入金额,则需要十进制
OmChoudhary

5

从ios 12.2(2019年3月25日发布)开始,此解决方案将起作用,并且是最简单的实现

<input type="number" inputmode="decimal"/>

这只会显示数字键盘,而不会显示input =“ tel”附带的#+ *字符


4

我不确定这是否是您想要的,但是输入类型=“ tel”将为您提供“电话号码簿”。


这不工作,为手机的键盘,但它也可以让其他疯狂喜欢*#;,。我只想要数字。根据文档,type="number"应该可以工作...
Alex Wayne 2013年

1
好吧,您在上面的问题中是什么苹果叫数字小键盘...
pIkEL 2013年

就是我想要的:f.cl.ly/items/0P0s1b3A1S3s170F1g2Q / ...没有电话的东西,只有数字。
亚历

这是很棒的小hack。需要一个邮政编码输入,只有我需要从中输入数据的数字。
SerKnight

2

以我的经验,这在浏览器之间是非常不一致的。iOS在我的用例中正确支持此功能之间来回切换。我通常只希望默认显示的键盘为数字键盘。我上次使用输入type =“ number”进行检查时,正确地调出了数字键盘,但忽略了“ size”属性,这严重影响了我的移动格式。我向所有输入添加了一个属性,我希望数字键盘默认使用它,并且当浏览器检测到可以正常工作的属性时,我使用jQuery更改了所有属性(即type =“ number”)。这样一来,我不必回顾和更新各个输入,只允许将其应用在受支持的浏览器中。

如果主要的移动操作系统除了输入类型之外还具有“默认键盘”的属性,那就太好了。如果用户输入地址或邮政编码怎么办?通常,这些以数字开头,因此默认情况下显示数字键盘,但允许输入任何文本会很有帮助。

至于验证,我不能依靠浏览器来支持对特定输入类型的验证,因此我使用javascript和服务器端验证。


0

问候。我知道这个问题很旧,但是我觉得这是一个非常受欢迎的解决方案,因此决定发布答案。

这是我为解决iPad键盘以及几乎所有其他东西而创建的解决方案

另外,这种方法不需要您使用类型编号的输入,在我的拙见中,此编号非常难看。

在下面,您可以找到有效的版本。

关于Apple iPad键盘按键的想法...

我必须创建一个keyPress事件处理程序来捕获和抑制iPad上似乎未被keyDown事件处理或模棱两可的键?

// Bind keydown event to all input type=text in form.
$("form input[type=text]").keydown(function (e) {

// Reference to keyCodes...
var key = e.which || e.keyCode;
// Reference to shiftKey...
var shift_key = e.shiftKey;
// Reference to ctrlKey...
var ctrl_key = e.ctrlKey;
// Reference to altKey...
var alt_key = e.altKey;


// When user presses the shiftKey...
if(e.shiftKey) {

//...supress its click and whatever key follows after it.
console.log(e.shiftKey + ' and ' + key + ' supressed.');

// Deny
return false;

// ONLY Allow Numbers, Numberpad, Backspace & Tab
} else if ( (key >= 48 && key <=57) || (key >= 96 && key <=105) || (key >= 8 && key <=9) ) {

// Allow
return true;

} else {

// Deny every other key and/or shift + key combination NOT explicitly declared.
return false;
}

});


// KeyPresss to handle remaining iPAD keyboard keys!
// These keys don't seem to be handled by the keyDown event or are ambiguous???!
// Bind keypress event to all input type=text in form.
$("form input[type=text]").keypress(function (e) {

// Reference to keyCodes...
var key = e.which || e.keyCode;
// Reference to shiftKey...
var shift_key = e.shiftKey;
// Reference to ctrlKey...
var ctrl_key = e.ctrlKey;
// Reference to altKey...
var alt_key = e.altKey;

switch (key) {

// Character -> ^
case 94:
return false;

// Character -> #
case 35:
return false;

// Character -> $
case 36:
return false;

// Character -> @
case 64:
return false;

// Character -> &
case 38:
return false;

// Character -> *
case 42:
return false;

// Character -> (
case 40:
return false;

// Character -> )
case 41:
return false;

// Character -> %
case 37:
return false;

// Character -> !
case 33:
return false;

}


});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<form action="">

<label for="text1">Numbers, Numberpad, Backspace & Tab ONLY:</label>
<input id="text1" type="text" placeholder="0" min="0" input pattern="[0-9]*" inputmode="numeric" value="" maxlength="4">

</form>


0

在阅读并尝试了很多想法之后,我发现所有内容都无法完全显示仅带有数字和逗号或点的键盘。

我完成<input type="number">onkeyup在此输入上使用just和handler的操作,在这里我做了类似的事情:

var previousValue = localStorage.getItem('myInputId');
if (input.getAttribute('type') === "number" && input.validity && input.validity.badInput) {
    input.value = previousValue || "";
}
localStorage.setItem('myInputId', input.value);

如果存在有效性错误,这可以防止用户通过将值替换为前一个值来写错字符(我不知道这是不是iOS对象或标准对象)

请注意,我没有测试此代码段,因为我身边有更复杂的内容,但我希望您能理解

使用此解决方案:

  • 在iOS上:用户具有完整的经典键盘,但默认情况下会打开数字键盘,并且不会输入错误的字符。
  • 在Android上,数字键盘是完美的选择。
  • 将来我们可以希望iOS会触发数字的优质键盘,并且永远不会调用javascript部分。
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.