HTML5:只有整数的数字inputtypes?

我正在使用通过jQuery实现HTML5validation的jQuery工具validation器 。 迄今为止,除了一件事以外,它一直在努力工作。 在HTML5规范中,inputtypes“number”可以同时具有整数和浮点数。 这似乎令人难以置信的短视,因为它只会是一个有用的validation,当你的数据库字段被签名的浮点数(对于未签名的整数,你将不得不退回到“模式”validation,从而松散的额外function,如上下箭头对于支持它的浏览器)。 是否有另一种inputtypes或可能是一个将input限制为无符号整数的属性? 我找不到任何,谢谢。

编辑

好吧,我感谢你的时间和帮助,但我看到许多不当的投票正在进行:D。 将步骤设置为1不是答案,因为它不限制input。 您仍然可以在文本框中input负浮点数。 另外,我知道模式validation(我在原始文章中提到过),但这不是问题的一部分。 我想知道HTML5是否允许将“number”types的input限制为正整数值。 对于这个问题,答案似乎是“不,不”。 我不想使用模式validation,因为这会导致使用jQuery工具validation时的一些缺点,但现在看来,规范不允许更干净的方式来做到这一点。

https://www.w3.org/wiki/HTML/Elements/input/number

只有HTML才能达到最好的效果

<input type="number" min="0" step="1"/> 

step属性设置为1

 <input type="number" step="1" /> 

这在Chrome中似乎有点bug,所以目前可能不是最好的解决scheme。

更好的解决scheme是使用pattern属性,它使用正则expression式来匹配input:

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

\d是数字的正则expression式, *表示它接受多于一个的数字。 这里是演示: http : //jsfiddle.net/b8NrE/1/

使用JavaScript的简单方法:

 <input type="text" oninput="this.value = this.value.replace(/[^0-9.]/g, ''); this.value = this.value.replace(/(\..*)\./g, '$1');" > 
 <input type="text" name="Phone Number" pattern="[0-9]{10}" title="Phone number"> 

使用此代码,文本域限制的input仅input数字….模式是HTML5中可用的新属性

Patter属性doc

这不仅是为所有浏览器的html5工作正常。 尝试这个

 onkeyup="this.value=this.value.replace(/[^0-9]/g,'');" 

模式是不错的,但如果你想限制input到只有type =“text”的数字,你可以使用oninput和正则expression式如下:

 <input type="text" oninput="this.value=this.value.replace(/[^0-9]/g,'');" id="myId"/> 

我为我而去:)

是的,HTML5呢。 试试这个代码( w3school ):

 <!DOCTYPE html> <html> <body> <form action=""> Quantity (between 1 and 5): <input type="number" name="quantity" min="1" max="5" /> <input type="submit" /> </form> </body> </html> 

查看最小和最大的参数? 我尝试使用Chrome 19(工作)和Firefox 12(没有工作)。

 var valKeyDown; var valKeyUp; function integerOnly(e) { e = e || window.event; var code = e.which || e.keyCode; if (!e.ctrlKey) { var arrIntCodes1 = new Array(96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 8, 9, 116); // 96 TO 105 - 0 TO 9 (Numpad) if (!e.shiftKey) { //48 to 57 - 0 to 9 arrIntCodes1.push(48); //These keys will be allowed only if shift key is NOT pressed arrIntCodes1.push(49); //Because, with shift key (48 to 57) events will print chars like @,#,$,%,^, etc. arrIntCodes1.push(50); arrIntCodes1.push(51); arrIntCodes1.push(52); arrIntCodes1.push(53); arrIntCodes1.push(54); arrIntCodes1.push(55); arrIntCodes1.push(56); arrIntCodes1.push(57); } var arrIntCodes2 = new Array(35, 36, 37, 38, 39, 40, 46); if ($.inArray(e.keyCode, arrIntCodes2) != -1) { arrIntCodes1.push(e.keyCode); } if ($.inArray(code, arrIntCodes1) == -1) { return false; } } return true; } $('.integerOnly').keydown(function (event) { valKeyDown = this.value; return integerOnly(event); }); $('.integerOnly').keyup(function (event) { //This is to protect if user copy-pastes some character value ,.. valKeyUp = this.value; //In that case, pasted text is replaced with old value, if (!new RegExp('^[0-9]*$').test(valKeyUp)) { //which is stored in 'valKeyDown' at keydown event. $(this).val(valKeyDown); //It is not possible to check this inside 'integerOnly' function as, } //one cannot get the text printed by keydown event }); //(that's why, this is checked on keyup) $('.integerOnly').bind('input propertychange', function(e) { //if user copy-pastes some character value using mouse valKeyUp = this.value; if (!new RegExp('^[0-9]*$').test(valKeyUp)) { $(this).val(valKeyDown); } }); 

设置step="any" 。 工作正常。 参考: http : //blog.isotoma.com/2012/03/html5-input-typenumber-and-decimalsfloats-in-chrome/

我一直在努力铬,并有一些问题,即使我使用HTML属性。 我结束了这个JS代码

 $("#element").on("input", function(){ var value = $(this).val(); $(this).val(""); $(this).val(parseInt(value)); return true; }); 

模式总是可取的限制,尝试oninputmin发生1从1号开始只input数字

 <input type="text" min="1" oninput="this.value=this.value.replace(/[^0-9]/g,'');" value=${var} > 

从规格

step="any"或正浮点数
指定元素值的粒度。

所以你可以简单地将它设置为1

你有没有尝试像这样设置step属性为1

 <input type="number" step="1" /> 

只要把它放在你的input字段中: onkeypress='return event.charCode >= 48 && event.charCode <= 57'

step属性设置为任何浮点数,例如0.01,你就可以走了。

您现在可以在Firefox input[inputmode]input的文本input限制为数字input[inputmode] ,请参阅Bruce Lawson关于input[inputmode]的新规范的文章 。

顺便说一下,如果你在“数字”input中有一个数字以外的任何东西,那么val()等返回“'。 我刚刚进行了检查,似乎为我所需要的(限制字母和其他字符)工作。

 if( var == '' ) { alert( 'Var is not a number' ); } 

与前导零,小数点等一起工作