<input type="number">
元素,maxlength
不起作用。如何限制该数字元素的maxlength
?#1 楼
并且您可以添加一个max
属性,该属性将指定您可以插入的最大数字。<input type="number" max="999" />
如果同时添加
max
和min
值,则可以指定范围允许的值:<input type="number" min="1" max="999" />
以上内容仍不会阻止用户手动输入超出指定范围的值。取而代之的是,在提交表单时,他将显示一个弹出窗口,告诉他在此范围内输入一个值,如以下屏幕快照所示:
评论
克里斯特,这行得通。就像@Andy所说的那样,我使用了oninput来分割附加数字。参考mathiasbynens.be/notes/oninput
– Prasad
2011年12月2日,11:41
@Prasad-如果Andy的答案是正确的,请选择它,而不是投票最多的一个。
– Moshe
2011-12-04 14:47
这是正确的,但应注意,因为Andy指出这并不限制键入更长的数字。因此,它实际上不是等效于文本字段中的maxlength。
– DA。
2012-03-20 23:14
如果您只是输入了一个较高精度的浮点数,则它将中断。例如。 3.1415926克服了这个问题,因为它小于999且大于1。
– 0112
2014年10月8日在21:58
我不知道为什么当它根本行不通时为什么会如此反对和接受!它只会影响“旋转器”控件,并不能阻止用户输入长数字。
– Codemonkey
15年7月31日在11:15
#2 楼
您可以指定min
和max
属性,这将仅允许在特定范围内输入。<!-- equivalent to maxlength=4 -->
<input type="number" min="-9999" max="9999">
这仅适用于微调器控制按钮。尽管用户可以键入大于允许的
max
的数字,但该表单不会提交。 来自Chrome 15的截图
您可以在JavaScript中使用HTML5
oninput
事件来限制字符数:myInput.oninput = function () {
if (this.value.length > 4) {
this.value = this.value.slice(0,4);
}
}
评论
这种JavaScript方法可能存在的一个问题:如果插入点不在值的末尾,则可能无法按预期工作。例如,如果在输入字段中输入值“ 1234”,然后将插入点移回该值的开头并键入“ 5”,则最后得到的值为“ 5123”。这与最大长度为4的输入type =“ text”字段不同,在该字段中,浏览器不允许您在“ full”字段中键入第5个字符,并且该值将保持为“ 1234”。
–乔恩·施耐德(Jon Schneider)
13年8月9日在13:08
@Andy,显然,问题是在寻找一种非JS方式来执行maxlength..........。
–起搏器
15年1月26日在13:29
@Pacerier:我的回答是否暗示我有其他想法?如您所见,我提供了仅使用HTML可以实现的最接近的解决方案,以及使用JavaScript的其他建议,OP可能希望防止用户输入超出允许范围的字符。
– Andy E
15年1月26日在16:43
#3 楼
如果要在Mobile Web解决方案中希望用户看到数字键盘,而不是全文键盘。使用type =“ tel”。它将与maxlength一起使用,从而使您无需创建额外的javascript。Max和Min仍将允许用户键入超出max和min的数字,这不是最佳选择。
评论
很棒的发现,它像一个魅力一样工作,因为不必创建额外的javascript。
–迭戈
2014年5月11日下午4:48
我发现这不是数字输入的最佳解决方案,因为“ tel”输入允许附加符号,并且在每个数字旁边显示字母。纯数字键盘看起来更干净。
– Hawkharris
14年7月25日在18:31
@hawkharris您是正确的,type =“ number”是更干净的UI。意外输入错误的字符会更容易。因此,需要进行其他验证以确保用户不会输入错误的数据。但也请注意,用户也可以使用数字键盘轻松输入所有小数点。如果没有其他JavaScript,它也无法解决上述问题。
–杜安
2014年7月25日在19:51
谢谢,我正在开发ionic框架移动应用程序,这解决了我的问题
–艾哈迈德(Ahmed)
17年8月20日在13:32
如果与pattern =“ [0-9] *”一起使用,则多余的符号将被禁用
– apereira
18-09-18在15:33
#4 楼
您可以像这样组合所有这些:<input name="myinput_drs"
oninput="maxLengthCheck(this)"
type = "number"
maxlength = "3"
min = "1"
max = "999" />
<script>
// This is an old version, for a more recent version look at
// https://jsfiddle.net/DRSDavidSoft/zb4ft1qq/2/
function maxLengthCheck(object)
{
if (object.value.length > object.maxLength)
object.value = object.value.slice(0, object.maxLength)
}
</script>
更新:
您可能还希望阻止输入任何非数字字符,因为
object.length
会为数字输入的空字符串,因此其长度为0
。因此,maxLengthCheck
函数将无法使用。解决方案:
请参阅此示例。
演示-请在此处查看代码的完整版本:http ://jsfiddle.net/DRSDavidSoft/zb4ft1qq/1/
更新2:这是更新代码:
https://jsfiddle.net/DRSDavidSoft/zb4ft1qq/2/
更新3:
请注意,允许输入的小数点以上可能会弄乱数字值。
评论
这是一个很好的解决方案,但是我发现如果输入任何非数字值,object.value.length将返回0。
–安德鲁(Andrew)
2014年12月14日在21:47
@AndrewSpear那是因为如果您在设置了数字类型的输入中输入非数字值,则object.value将是一个空字符串。请参阅文档。另外,请阅读我的更新以解决此问题。
– David Refoua
2014年12月17日的1:08
如果您输入多个小数点(例如111..1111),这仍然会中断。不要使用此代码来确保安全,因为恶意代码可能仍会通过。
–PieBie
15年12月21日在13:52
@PieBie Dude,此代码适用于3年前。改用jQuery。
– David Refoua
15年12月21日在18:38
是的,我知道,但是初学者仍然可以复制粘贴它。
–PieBie
15年12月22日在7:45
#5 楼
这非常简单,您可以使用一些JavaScript来模拟maxlength
,并检查出来://maxlength="2"
<input type="number" onKeyDown="if(this.value.length==2) return false;" />
评论
对于您的解决方案,一旦达到2个字符,就不能使用退格键。但我错过了一些实用的解决方案
–克里斯托弗·德博夫(Christophe Debove)
2015年11月11日20:29
代替onKeyDown,您应该使用onKeyPress。
– Rupesh Arora
16年5月25日在5:44
如果您突出显示文本并按一个字符(即替换输入内容)将不起作用
– Arijoon
16年5月31日在13:45
如果不是来自以下键,请对此进行验证stackoverflow.com/a/2353562/1534925
– Akshay
16年7月4日在13:57
keydown的问题是您不能在最大字符数处使用退格键。按键的问题是您可以复制和粘贴超过最大字符数的字符。
– Stavm
17年12月19日在20:50
#6 楼
或者,例如,如果您的最大值是99且最小值为0,则可以将其添加到输入元素(您的值将被最大值等重写)。<input type="number" min="0" max="99"
onKeyUp="if(this.value>99){this.value='99';}else if(this.value<0){this.value='0';}"
id="yourid">
然后(如果需要),您可以检查是否输入的确实是数字
评论
...很好,但是您不再需要最小和最大花花公子。 (只是说)
–xoxel
16-09-30在13:04
如果您仍要显示警告消息,请执行@xoxel
– DNKROZ
17年7月24日在9:57
为了通用起见,我会这样做onKeyUp =“ if(this.value> this.max)this.value = this.max; if(this.value
– oriadam
3月1日8:27
#7 楼
您可以将其指定为文本,但可以添加仅匹配数字的pettern:<input type="text" pattern="\d*" maxlength="2">
它非常完美,并且可以在移动设备上(在iOS 8和Android上测试)弹出数字键盘。
评论
IE9和更早版本不支持pattern属性,并且在Safari中具有部分支持:caniuse.com/#feat=input-pattern
– Diazdeteran
2015年10月9日在3:02
是的,感谢您的指点,但是我们放弃了IE9支持(从中删除了芥末酱),与JS方法相比,我更喜欢它。取决于项目。
–克里斯·潘纳奥托夫(Chris Panayotoff)
2015年10月9日在8:18
不会阻止用户以此输入非数字字符。他们可以输入2个任何字符。该模式仅导致验证突出显示。
–brt
18-10-4在16:34
在Android 9(Nokia 8)上进行了测试,但是我得到了常规键盘:(有什么想法吗?
– oriadam
3月1日9:55
#8 楼
//For Angular I have attached following snippet.
<div ng-app="">
<form>
Enter number: <input type="number" ng-model="number" onKeyPress="if(this.value.length==7) return false;" min="0">
</form>
<h1>You entered: {{number}}</h1>
</div>
如果您使用“ onkeypress”事件,那么在开发(单元测试)时,您将不会受到任何用户限制。如果您有不允许用户在特定限制后输入的要求,请查看此代码,然后尝试一次。
评论
我在这里看到的问题是:1.如果输入达到7个数字,则替换为选择文本和类型将不起作用2.当溢出“边界”命中时,将输入增加1-> 9999999并向上滑动按钮。打破限制
– Edub
17年6月1日在9:38
我尝试使用简单版本的javascript。如果需要,您可以查看使用运行代码段。因此,我没有发现任何限制。
– Prasad Shinde
17年6月1日在12:08
也没有发现任何限制。它停在7位数字。我正在为我的代码使用此解决方案。
– Claudio
17年9月19日在22:39
有一个局限性。当您达到限制时,请全选并替换它们,这是行不通的。仅当我在返回false之前用cur 1覆盖值时,替换才对我有用。
–Insomnia88
19年11月19日在13:56
@ Insomnia88,@ edub如果我们编写函数并检查必要条件,该怎么办...
– Prasad Shinde
19/12/24在14:39
#9 楼
假设您希望最大允许值为1000-键入或使用微调器。使用以下方法限制微调器的值:
type="number" min="0" max="1000"
并限制什么用javascript用键盘输入:
onkeyup="if(parseInt(this.value)>1000){ this.value =1000; return false; }
“ <input type="number" min="0" max="1000" onkeyup="if(parseInt(this.value)>1000){ this.value =1000; return false; }">
评论
这是最好的解决方案!一行,没有验证器,没有逻辑,没有监听器
–弗兰基·德雷克(Frankie Drake)
11月19日下午3:54
#10 楼
另一个选择是仅添加具有maxlength属性的任何内容的侦听器,然后向其添加slice值。假设用户不想在与输入相关的每个事件中使用函数。这是一个代码片段。忽略CSS和HTML代码,最重要的是JavaScript。 // Reusable Function to Enforce MaxLength
function enforce_maxlength(event) {
var t = event.target;
if (t.hasAttribute('maxlength')) {
t.value = t.value.slice(0, t.getAttribute('maxlength'));
}
}
// Global Listener for anything with an maxlength attribute.
// I put the listener on the body, put it on whatever.
document.body.addEventListener('input', enforce_maxlength);
label { margin: 10px; font-size: 16px; display: block }
input { margin: 0 10px 10px; padding: 5px; font-size: 24px; width: 100px }
span { margin: 0 10px 10px; display: block; font-size: 12px; color: #666 }
<label for="test_input">Text Input</label>
<input id="test_input" type="text" maxlength="5"/>
<span>set to 5 maxlength</span>
<br>
<label for="test_input">Number Input</label>
<input id="test_input" type="number" min="0" max="99" maxlength="2"/>
<span>set to 2 maxlength, min 0 and max 99</span>
#11 楼
最大长度将不适用于<input type="number"
,我知道的最好方法是使用oninput
事件来限制最大长度。请参见下面的代码以实现简单的实现。<input name="somename"
oninput="javascript: if (this.value.length > this.maxLength) this.value = this.value.slice(0, this.maxLength);"
type = "number"
maxlength = "6"
/>
评论
像魅力一样工作!
– SiboVG
3月18日23:18
#12 楼
正如其他人所述,min / max与maxlength不同,因为人们仍然可以输入一个大于您期望的最大字符串长度的浮点数。要真正模拟maxlength属性,您可以在紧要关头做类似的事情(相当于maxlength =“ 16”):<input type="number" oninput="if(value.length>16)value=value.slice(0,16)">
评论
当在中间插入切片时,切片将删除没有最终用户了解的字符。而最大长度会阻塞。
– Pradeep Kumar Prabaharan
15/12/26在8:56
数字输入不支持@PradeepKumarPrabaharan maxlength。在我的示例中,除非输入值超过16个字符,否则value.slice(0,16)不会插入。
– thdoan
2015年12月27日12:44
是的,数字输入不支持maxlength。.该代码是gud,但此代码与maxlength的属性不完全匹配。
– Pradeep Kumar Prabaharan
15年12月28日在5:22
@TobiasGaertner type =“ number”可以解决:)。
– thdoan
16-10-21在3:45
@ 10basetom ...取决于浏览器...例如在FF中,您仍然可以输入字符,并且字符数不会超出限制,但是与类型号的概念有关,这是可以接受的解决方案。
– Tobias Gaertner
16-10-25在11:51
#13 楼
我之前遇到过此问题,因此我使用了html5数字类型和jQuery的组合解决了这个问题。<input maxlength="2" min="0" max="59" name="minutes" value="0" type="number"/>
脚本:
$("input[name='minutes']").on('keyup keypress blur change', function(e) {
//return false if not 0-9
if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) {
return false;
}else{
//limit length but allow backspace so that you can still delete the numbers.
if( $(this).val().length >= parseInt($(this).attr('maxlength')) && (e.which != 8 && e.which != 0)){
return false;
}
}
});
我不知道这些事件是否有点矫kill过正,但这解决了我的问题。
JSfiddle
评论
您可以轻松地粘贴字符。
–杰西卡(Jessica)
2015年12月7日,下午4:06
#14 楼
Maycow Moura的答案是一个好的开始。但是,他的解决方案意味着,当您输入第二位数字时,该字段的所有编辑都将停止。因此,您无法更改值或删除任何字符。
以下代码在2处停止,但允许继续编辑;
//MaxLength 2
onKeyDown="if(this.value.length==2) this.value = this.value.slice(0, - 1);"
评论
不。尝试粘贴一个值。
– Qwertiy
2015年9月7日14:52
#15 楼
设置数字输入的最大长度的一种简单方法是: <input type="number" onkeypress="return this.value.length < 4;" oninput="if(this.value.length>=4) { this.value = this.value.slice(0,4); }" />
评论
在android chrome上不起作用。 onkeypress与此有关。
– Aakash Thakur
19年5月6日在11:12
#16 楼
啊。就像有人在实现它的过程中放弃了一半,以为没人会注意到。由于任何原因,以上答案都没有使用
min
和max
属性。这个jQuery完成了它: -devil”类型。评论
它无法正确回答问题,但因为它解决了我的问题,所以投票赞成:)
–TrOnNe
18年11月13日在17:52
#17 楼
与type="number"
一样,您可以指定max
而不是maxlength
属性,该属性是可能的最大数目。因此,如果使用4位数字,则max
应该是9999
,应该是5位数字99999
,依此类推。此外,如果要确保它是一个正数,可以设置
min="0"
,以确保为正数。#18 楼
HTML输入 <input class="minutesInput" type="number" min="10" max="120" value="" />
jQuery
$(".minutesInput").on('keyup keypress blur change', function(e) {
if($(this).val() > 120){
$(this).val('120');
return false;
}
});
#19 楼
<input type="number" onchange="this.value=Math.max(Math.min(this.value, 100), -100);" />
,或者如果您不希望输入任何内容
<input type="number" onchange="this.value=this.value ? Math.max(Math.min(this.value,100),-100) : null" />
#20 楼
我发现您不能使用onkeydown
,onkeypress
或onkeyup
事件中的任何一个来获得包括移动浏览器在内的完整解决方案。顺便说一下,onkeypress
已被弃用,不再出现在chrome / opera for android中(请参阅:UI Events W3C工作草案,2016年8月4日)。
我想出了使用
oninput
的解决方案您可能需要根据需要执行其他数字检查,例如负/正号或十进制和千位分隔符之类,但首先应满足以下条件:
function checkMaxLength(event) {
// Prepare to restore the previous value.
if (this.oldValue === undefined) {
this.oldValue = this.defaultValue;
}
if (this.value.length > this.maxLength) {
// Set back to the previous value.
this.value = oldVal;
}
else {
// Store the previous value.
this.oldValue = this.value;
// Make additional checks for +/- or ./, etc.
// Also consider to combine 'maxlength'
// with 'min' and 'max' to prevent wrong submits.
}
}
我还建议将
maxlength
与min
和max
结合使用,以防止多次如上所述的错误提交。#21 楼
对于具有长度限制的数字输入,您也可以尝试使用此方法。<input type="tel" maxlength="3" />
评论
@tiltdown键入错误。更正了答案。
– shinobi
2014年11月19日上午10:05
#22 楼
我知道已经有答案了,但是如果您希望输入的行为与maxlength
属性完全一样,或者尽可能接近,请使用以下代码:(function($) {
methods = {
/*
* addMax will take the applied element and add a javascript behavior
* that will set the max length
*/
addMax: function() {
// set variables
var
maxlAttr = $(this).attr("maxlength"),
maxAttR = $(this).attr("max"),
x = 0,
max = "";
// If the element has maxlength apply the code.
if (typeof maxlAttr !== typeof undefined && maxlAttr !== false) {
// create a max equivelant
if (typeof maxlAttr !== typeof undefined && maxlAttr !== false){
while (x < maxlAttr) {
max += "9";
x++;
}
maxAttR = max;
}
// Permissible Keys that can be used while the input has reached maxlength
var keys = [
8, // backspace
9, // tab
13, // enter
46, // delete
37, 39, 38, 40 // arrow keys<^>v
]
// Apply changes to element
$(this)
.attr("max", maxAttR) //add existing max or new max
.keydown(function(event) {
// restrict key press on length reached unless key being used is in keys array or there is highlighted text
if ($(this).val().length == maxlAttr && $.inArray(event.which, keys) == -1 && methods.isTextSelected() == false) return false;
});;
}
},
/*
* isTextSelected returns true if there is a selection on the page.
* This is so that if the user selects text and then presses a number
* it will behave as normal by replacing the selection with the value
* of the key pressed.
*/
isTextSelected: function() {
// set text variable
text = "";
if (window.getSelection) {
text = window.getSelection().toString();
} else if (document.selection && document.selection.type != "Control") {
text = document.selection.createRange().text;
}
return (text.length > 0);
}
};
$.maxlengthNumber = function(){
// Get all number inputs that have maxlength
methods.addMax.call($("input[type=number]"));
}
})($)
// Apply it:
$.maxlengthNumber();
评论
@Phill_t也许您可以启发我?我使用了您的代码,并且在主要的“ $(this).attr(“ maxlength”)”中总是能正常工作。为什么使用“ $(this).attr(“ maxlength”)”会更好?如果它正在工作,而不仅仅是我测试并正在按预期工作的“ this.maxlength”,并且更短,恕我直言也更清晰阅读?我想念什么吗?
–markus s
17年1月26日在6:22
你是什么意思“交付2”?
– Philll_t
17年1月26日在6:40
抱歉,我很抱歉。 “ this.maxLength”仅在keydown函数的范围内起作用。在函数“ addMax”中,“ this”是文档而不是预期的元素,因此具有不同的属性值。我将如何访问数字输入?上面的代码真的对您有用吗?我使用Chrome / Opera / Vivaldi,Firefox,Edge,IE和Safari进行了测试,每个浏览器的结果相同。好的,在Edge中,maxlegth =“ 1”和maxlength =“ 2”确实可以工作,但是“ $(this..attr(” maxlength“)”“不会再增加更多!! @anybody:有什么建议吗?
–markus s
17年1月26日在7:01
正如我所说的,它总是两个,因为它是在文档上而不是在调试时发现的有问题的元素上调用的。顺便说一句,您可能还想看看我在研究您的解决方案后得出的解决方案:stackoverflow.com/a/41871960/1312012
–markus s
17年1月26日,11:01
#23 楼
使用更相关的属性是min
和max
。#24 楼
这可能会对某人有所帮助。使用少量的javascript,您可以搜索所有datetime-local输入,搜索用户尝试输入的年份(未来大于100年):
$('input[type=datetime-local]').each(function( index ) {
$(this).change(function() {
var today = new Date();
var date = new Date(this.value);
var yearFuture = new Date();
yearFuture.setFullYear(yearFuture.getFullYear()+100);
if(date.getFullYear() > yearFuture.getFullYear()) {
this.value = today.getFullYear() + this.value.slice(4);
}
})
});
#25 楼
我对所有输入(使用jQuery)使用一个简单的解决方案:$(document).on('input', ':input[type="number"][maxlength]', function () {
if (this.value.length > this.maxLength) {
this.value = this.value.slice(0, this.maxLength);
}
});
代码选择已定义maxlength的所有输入type =“ number”元素。
#26 楼
可以使用的简单解决方案,输入滚动事件
通过键盘复制粘贴
通过鼠标复制粘贴
输入类型等情况
<input id="maxLengthCheck"
name="maxLengthCheck"
type="number"
step="1"
min="0"
oninput="this.value = this.value > 5 ? 5 : Math.abs(this.value)" />
请参见this.value> 5的条件,只需更新5为您的最大限制。
说明:
如果我们输入的数字更多,那么我们的限制将使用正确的数字Math.abs(this.value)更新输入值this.value。
否则将其设置为最大限制,即再次达到5。
评论
对于寻求更好解决方案的人们,这是最好的:stackoverflow.com/questions/9361193/…max属性在android平板电脑的chrome浏览器中不起作用。
@ÜnsalKorkmaz:该解决方案的缺点是无法在android设备上启动数字键盘