HTML5输入类型编号重新格式化长号

时间:2017-09-15 14:12:33

标签: html5

我有一个应用程序,用户必须在数字类型文本框中输入至少15位数字。

如果用户输入更长的数字,有时> = 19位数,然后使用右侧的箭头或键盘上的箭头键,它会将数字自动编码为e+的浮点数。这显然不是理想的结束。



<input min="0" type="number" value="7897894561234567898">
&#13;
&#13;
&#13;

删除或抵消此行为的最佳方法是什么?有什么要做的,还是我必须使用文本类型输入? (我不愿意)。

1 个答案:

答案 0 :(得分:1)

HTML5 <input type=number>专门使用与JavaScript相同的Number类型。 maximum integer value before precision is lost是9007199254740991,有16位数字。

您不能处理比​​JavaScript中的数字更大的整数,您必须将其视为字符串。

您应该使用<input type=text>pattern属性进行验证,使用inputmode属性进行触摸。默认验证消息没用,因此也应该处理'invalid'事件。

(开玩笑,任何地方都不支持inputmode。您应该使用<input type=tel>在触摸屏设备上显示数字键盘。)

<form>
  <input name=num type=tel
         required pattern="\d+"
         oninvalid="setCustomValidity('A number is required')"
         oninput="setCustomValidity('')">
  <input type=submit>
</form>

规范中有关于信用卡号码的说明:

  

type=number状态不适用于仅由数字组成但严格来说不是数字的输入。例如,它不适合信用卡号码或美国邮政编码。确定是否使用type = number的简单方法是考虑输入控件是否有意义具有旋转框接口(例如,具有“向上”和“向下”箭头)。

请参阅:https://html.spec.whatwg.org/multipage/input.html#number-state-(type=number)