该maxlength
属性不适用于<input type="number">
。这仅在Chrome中发生。
<input type="number" class="test_css" maxlength="4" id="flight_number" name="number"/>
该maxlength
属性不适用于<input type="number">
。这仅在Chrome中发生。
<input type="number" class="test_css" maxlength="4" id="flight_number" name="number"/>
Answers:
如果值类型属性是
text
,search
,password
,tel
,或url
,此属性指定的最大字符数(在Unicode代码点),用户可以输入; 对于其他控件类型,将忽略它。
因此maxlength
在<input type="number">
设计上被忽略。
根据您的需要,您可以按照答案中的inon建议使用min
and max
属性(注意:这将仅定义一个受限制的范围,而不是该值的实际字符长度,尽管-9999到9999将覆盖所有0-4位数字),也可以使用常规文本输入并使用新属性在字段上强制执行验证:pattern
<input type="text" pattern="\d*" maxlength="4">
type=number
通过设置max
属性将“键盘输入”的物理长度限制为输入。此属性仅限制输入的微调器选择的数字。
\d*
什么?
regex
和模式是一项非常有创意的工作。但是,在移动设备中,没有什么不同,Android
或者iOS
是text
输入,因此会造成不良后果UX
。
最大长度不能以<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"
/>
||0/1
oninput="this.value=this.value.slice(0,this.maxLength)"
应该工作
许多人发布的onKeyDown()
事件根本不起作用,即一旦达到限制就无法删除。所以代替onKeyDown()
使用onKeyPress()
它就可以正常工作。
下面是工作代码:
User will not be allowed to enter more than 4 digits
<br>
<input type="number" pattern="/^-?\d+\.?\d*$/" onKeyPress="if(this.value.length==4) return false;" />
number
输入类型
我有两种方法可以做到
首先:使用type="tel"
,它将像type="number"
在移动设备中一样工作,并接受maxlength:
<input type="tel" />
第二:使用一些JavaScript:
<!-- maxlength="2" -->
<input type="tel" onKeyDown="if(this.value.length==2 && event.keyCode!=8) return false;" />
您可以使用min和max属性。
以下代码执行相同的操作:
<input type="number" min="-999" max="9999"/>
9999
但用户可以手动键入超过该长度的数字。
将输入类型更改为文本,然后使用“ oninput”事件调用函数:
<input type="text" oninput="numberOnly(this.id);" class="test_css" maxlength="4" id="flight_number" name="number"/>
现在使用Javascript Regex过滤用户输入并将其限制为数字:
function numberOnly(id) {
// Get element by id which passed as parameter within HTML element event
var element = document.getElementById(id);
// Use numbers only pattern, from 0 to 9
var regex = /[^0-9]/gi;
// This removes any other character but numbers as entered by user
element.value = element.value.replace(regex, "");
}
我曾经遇到过同样的问题,并根据自己的需要找到了这种解决方案。可能有帮助。
<input type="number" placeholder="Enter 4 Digits" max="9999" min="0"
onKeyDown="if(this.value.length==4 && event.keyCode>47 && event.keyCode < 58)return false;"
/>
快乐编码:)
对于具有长度限制的数字输入,您也可以尝试此操作
<input type="tel" maxlength="4" />
tel
输入将因此自动得到验证,在某些奇怪的情况下,前导0
s将更改为1
s。
<input type="number" oninput="this.value = this.value.replace(/[^0-9.]/g, ''); this.value = this.value.replace(/(\..*)\./g, '$1');" onKeyDown="if(this.value.length==10 && event.keyCode!=8) return false;">
这是我的jQuery解决方案...您必须将maxlength添加到输入type = number
$('body').on('keypress', 'input[type=number][maxlength]', function(event){
var key = event.keyCode || event.charCode;
var charcodestring = String.fromCharCode(event.which);
var txtVal = $(this).val();
var maxlength = $(this).attr('maxlength');
var regex = new RegExp('^[0-9]+$');
// 8 = backspace 46 = Del 13 = Enter 39 = Left 37 = right Tab = 9
if( key == 8 || key == 46 || key == 13 || key == 37 || key == 39 || key == 9 ){
return true;
}
// maxlength allready reached
if(txtVal.length==maxlength){
event.preventDefault();
return false;
}
// pressed key have to be a number
if( !regex.test(charcodestring) ){
event.preventDefault();
return false;
}
return true;
});
并处理复制和粘贴:
$('body').on('paste', 'input[type=number][maxlength]', function(event) {
//catch copy and paste
var ref = $(this);
var regex = new RegExp('^[0-9]+$');
var maxlength = ref.attr('maxlength');
var clipboardData = event.originalEvent.clipboardData.getData('text');
var txtVal = ref.val();//current value
var filteredString = '';
var combined_input = txtVal + clipboardData;//dont forget old data
for (var i = 0; i < combined_input.length; i++) {
if( filteredString.length < maxlength ){
if( regex.test(combined_input[i]) ){
filteredString += combined_input[i];
}
}
}
setTimeout(function(){
ref.val('').val(filteredString)
},100);
});
希望对您有所帮助。
this.value = this.value.slice(0, this.maxLength);
您认为这有什么问题吗?到目前为止我还没有找到。它也涵盖粘贴的文本。
根据我的经验,人们问为什么maxlength
被忽略的大多数问题是因为允许用户输入的字符数超过了“允许的”数目。
如其他评论所述,type="number"
输入内容没有maxlength
属性,而是具有min
and max
属性。
要使该字段限制可插入的字符数,同时允许用户在提交表单之前意识到这一点(浏览器应标识value> max否则),您必须(至少现在)添加一个现场的听众。
这是我过去使用的解决方案:http : //codepen.io/wuori/pen/LNyYBM
我知道已经有一个答案,但是如果您希望输入的行为与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();
我最近刚刚尝试过的绝对解决方案是:
<input class="class-name" placeholder="1234567" name="elementname" type="text" maxlength="4" onkeypress="return (event.charCode == 8 || event.charCode == 0 || event.charCode == 13) ? null : event.charCode >= 48 && event.charCode <= 57" />
<input type="number">
仅仅是...一个数字输入(尽管没有从字符串转换为通过Javascript浮动)。
我的猜测是,它不会限制按键输入的字符,maxLength
否则如果用户在开始时忘记了小数,则用户可能会陷入“按键陷阱”中(尝试.
在已达到“ maxLength” attr 1
时放置at索引)<input type"text">
)。但是,如果您设置了max
属性,它将在表单提交时验证。
如果您要限制/验证电话号码,请使用type="tel"
attr / value。它服从maxLength
attr并仅调出移动数字键盘(在现代浏览器中),并且您可以将输入限制为某种模式(即pattern="[0-9]{10}"
)。
maxlenght-输入文字
<input type="email" name="email" maxlength="50">
使用jQuery:
$("input").attr("maxlength", 50)
maxlenght-输入类型编号
JS
function limit(element, max) {
var max_chars = max;
if(element.value.length > max_chars) {
element.value = element.value.substr(0, max_chars);
}
}
的HTML
<input type="number" name="telefono" onkeydown="limit(this, 20);" onkeyup="limit(this, 20);">
type="number"
是HTML 5规范中的一种新类型。如果你在测试浏览器不能识别type="number"
它将把它作为type="text"
其不尊重maxlength
属性。这可以解释您所看到的行为。