有没有办法强制数字键盘出现在电话<input type="text">?我刚刚意识到,<input type="number">在HTML5中是“浮点数”,所以它不适合信用卡号,邮政编码等。
我想模拟<input type="number">的数字键盘功能,用于接受浮点数以外的数值的输入。是否有其他合适的输入类型可以做到这一点?
有没有办法强制数字键盘出现在电话<input type="text">?我刚刚意识到,<input type="number">在HTML5中是“浮点数”,所以它不适合信用卡号,邮政编码等。
我想模拟<input type="number">的数字键盘功能,用于接受浮点数以外的数值的输入。是否有其他合适的输入类型可以做到这一点?
当前回答
在2015年年中,我认为这是最好的解决方案:
<input type="number" pattern="[0-9]*" inputmode="numeric">
这将给你在Android和iOS上的数字键盘:
它还为您提供了预期的桌面行为,向上/向下箭头按钮和键盘友好的向上/向下箭头键递增:
试试下面的代码片段:
< >形式 <input type="number" pattern="[0-9]*" inputmode="numeric"> <按钮类型=“提交”> > < /按钮提交 > < /形式
通过结合type="number"和pattern="[0-9]*,我们得到了一个适用于任何地方的解决方案。并且,它向前兼容未来HTML 5.1提出的inputmode属性。
注意:使用模式将触发浏览器的原生表单验证。可以使用novalidate属性禁用此功能,也可以使用title属性自定义验证失败的错误消息。
如果您需要能够输入前导零、逗号或字母(例如,国际邮政编码),请检查这个轻微的变体。
致谢及进一步阅读:
http://www.smashingmagazine.com/2015/05/form-inputs-browser-support-issue/ http://danielfriesen.name/blog/2013/09/19/input-type-number-and-ios-numeric-keypad/
其他回答
所有发布的答案都会触发数字键盘,这不是OP要求的。我发现在文本输入中触发type='number'键盘的唯一方法是使用CSS和JS。
诀窍是创建第二个数字输入,使用css将其重叠在文本输入的顶部。
<style type="text/css">
/* hide number spinners on inputs */
input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
}
input[type=number] {
-moz-appearance:textfield; /* Firefox */
}
.hidden-number {
margin-top: -26px;
}
</style>
<form method="post" action="submit.php">
<input class="form-control" type="text" name="input_name">
<input class="form-control hidden-number" type="number" id="input_name">
</form>
使用JavaScript,当您的数字输入获得焦点时,它将触发您想要的键盘。然后,您必须删除type='number'属性,这将阻止您输入除数字以外的任何内容。然后将文本输入中的任何内容转移到数字输入中。最后,当数字输入失去焦点时,将其内容转移回文本输入并替换其type='number'属性。
<script type="text/javascript">
$(".hidden-number").on("focus", function(){
$(this).removeAttr("type");
var text_input = $("input[name="+this.id+"]");
$(this).val(text_input.val());
text_input.val("");
});
$(".hidden-number").on("focusout", function(){
var text_input = $("input[name="+this.id+"]");
text_input.val($(this).val());
$(this).attr("type", "number");
});
</script>
使用type="email"或type="url"至少在某些手机上可以给你一个键盘,比如iPhone。对于电话号码,你可以使用type="tel"。
我发现,至少对于类似“密码”的字段,执行类似<input type="tel" />这样的操作最终会生成最真实的面向数字的字段,而且它也没有自动格式化的好处。例如,在我最近为希尔顿酒店开发的一个移动应用程序中,我最后使用了这个:
... 我的客户对此印象深刻。
< >形式 <input type="tel" /> <按钮类型=“提交”> > < /按钮提交 > < /形式
有一个简单的方法来实现这种类型的行为(比如如果我们想在输入字段中使用文本格式,但仍然希望显示数字键盘):
我的输入:
<input inputMode=“numeric” onChange={handleInputChange} />
提示:如果你想要这种类型的行为(逗号分隔的数字) 然后遵循handleInputChange实现(这是基于上述状态的反应)
<input type="text" inputmode="decimal">
它将给你文本输入使用数字键盘