【发布时间】:2013-09-01 21:08:37
【问题描述】:
maxlength 属性不适用于<input type="number">。这只发生在 Chrome 中。
<input type="number" class="test_css" maxlength="4" id="flight_number" name="number"/>
【问题讨论】:
标签: html google-chrome
maxlength 属性不适用于<input type="number">。这只发生在 Chrome 中。
<input type="number" class="test_css" maxlength="4" id="flight_number" name="number"/>
【问题讨论】:
标签: html google-chrome
来自MDN's documentation for <input>
如果type属性的值为
text、search、password、tel或url,则该属性指定最大数量用户可以输入的字符(Unicode 代码点);对于其他控件类型,将被忽略。
所以 maxlength 在设计上会在 <input type="number"> 上被忽略。
根据您的需要,您可以使用min 和max 属性作为他/她的答案中建议的inon(注意:这只会定义一个受限制的范围,而不是实际的字符值的长度,尽管 -9999 到 9999 将涵盖所有 0-4 位数字),或者您可以使用常规文本输入并使用新的 pattern 属性对字段进行验证:
<input type="text" pattern="\d*" maxlength="4">
【讨论】:
type="number" 是 HTML 5 规范中的新类型。如果您正在测试的浏览器无法识别type="number",它会将其视为type="text",确实尊重maxlength 属性。这可以解释您所看到的行为。
max 属性将“键盘输入”的物理长度限制为 type=number 输入。此属性仅限制输入的微调器选择的数字。
\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"
/>
【讨论】:
oninput="this.value=this.value.slice(0,this.maxLength)" 应该可以工作
<input type="number"> stackoverflow.com/questions/18510845/… 上为我工作
number 类型的 maxlength 属性是无效的 HTML5,因此可能会从 Javascript 中删除 .maxLength 属性。我认为最好使用data 属性:<input type="number" data-maxlength="6" oninput="this.value=this.value.slice(0,this.dataset.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,用户可以手动输入超过该长度的数字。
这也适用于 Android
将输入类型更改为文本并使用“oninput”事件调用函数:
<input type="text" oninput="numberOnly(this.id);" 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);
// This removes any other character but numbers as entered by user
element.value = element.value.replace(/[^0-9]/gi, "");
}
【讨论】:
<input ref={AreaRef} type="text" onInput={(e)=>{AreaRef.current.value = e.target.value.replace(/[^0-9]/gi, "")}} />
对于 React 用户,
只需将 10 替换为您的最大长度要求
<input type="number" onInput={(e) => e.target.value = e.target.value.slice(0, 10)}/>
【讨论】:
我曾经遇到过同样的问题,并根据我的需要找到了这个解决方案。 它可能对某些人有所帮助。
<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 输入将被自动验证,在某些奇怪的情况下,前导 0s 将更改为 1s。
尝试使用电话:
maxlength="5" type="tel"
【讨论】:
如何限制输入类型最大长度
<input name="somename"
oninput="javascript: if (this.value.length > this.maxLength) this.value = this.value.slice(0, this.maxLength);"
type = "number"
maxlength = "6"
/>
【讨论】:
<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;">
演示 - JSFIDDLE
【讨论】:
这是我使用 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); 你认为这个有什么问题吗?到目前为止我还没有找到。它也涵盖粘贴的文本。
我写了一个小而干净的解决方法。使用此功能将使其正常工作
const inputHandler = (e) => {
const { value, maxLength } = e.target;
if (String(value).length >= maxLength) {
e.preventDefault();
return;
}
};
例如,它可以像这样在 React 中使用:
<input
type="number"
maxlength="4"
onKeyPress={inputHandler}
/>
【讨论】:
根据我的经验,人们询问为什么忽略 maxlength 的大多数问题是因为允许用户输入超过“允许”数量的字符。
正如其他 cmets 所述,type="number" 输入没有 maxlength 属性,而是有 min 和 max 属性。
要让字段限制可以插入的字符数,同时允许用户在提交表单之前知道这一点(浏览器应该识别 value > max 否则),您必须(目前,至少) 向该字段添加一个侦听器。
这是我过去使用过的解决方案:http://codepen.io/wuori/pen/LNyYBM
【讨论】:
输入 type="number" 忽略最大长度
没错,请参阅文档here
相反,您可以使用type="text" 并使用javascript 函数来只允许数字。
试试这个:
function onlyNumber(evt) {
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode > 31 && (charCode < 48 || charCode > 57)){
return false;
}
return true;
}
<input type="text" maxlength="4" onkeypress="return onlyNumber(event)">
【讨论】:
试试这个,
<input type="number" onkeypress="return this.value.length < 4;" oninput="if(this.value.length>=4) { this.value = this.value.slice(0,4); }" />
【讨论】:
Chrome(技术上,Blink)will not implement maxlength for <input type="number">。
The HTML5 specification 表示 maxlength 仅适用于 text、url、e-mail、search、tel 和 password 类型。
【讨论】:
完成!仅数字和 maxlength 完美。
<input maxlength="5" data-rule-maxlength="5" style="height:30px;width: 786px;" type="number" oninput="javascript: if (this.value.length > this.maxLength) this.value = this.value.slice(0, this.maxLength); this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1');" />
【讨论】:
我知道已经有了答案,但是如果您希望输入的行为与 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" />
【讨论】:
使用正则表达式输入类型文本和 oninput 事件以仅接受对我有用的数字。
<input type="text" maxlength="4" oninput="this.value=this.value.replace(/[^0-9]/g,'');" id="myId"/>
【讨论】:
如果您想在 React 函数组件 中执行此操作或不使用 "this",这里有一种方法。
<input onInput={handleOnInput}/>
const handleOnInput = (e) => {
let maxNum = 4;
if (e.target.value.length > maxNum) {
e.target.value = e.target.value.slice(0, maxNum);
}
};
【讨论】:
let maxNum = 4; 到let maxNum = e.target.getAttribute('maxlength'); 这样我可以在我的代码中使用任何最大长度数字,这应该可以工作。
根据上面 Neha Jain 的回答,我只是在公共区域添加了以下代码
$(':input[type="number"]').on('input', function() {
if (this.value.length > this.maxLength) this.value = this.value.slice(0, this.maxLength);
});
然后您可以使用 maxlength="4" 之类的文本类型字段。
【讨论】:
以下代码将允许用户:
<input type="number" name="test_name" min="0" max="999" oninput="validity.valid||(value='');">
【讨论】:
<input type="number"> 只是...一个数字输入(虽然,未通过 Javascript 从字符串转换为浮点数)。
我的猜测,它不会限制 maxLength 的键输入字符,否则如果用户忘记开头的小数点,您的用户可能会陷入“键陷阱”(尝试将 . 放在索引 @ 987654324@ 当 <input type"text"> "maxLength" attr 已经达到)。但是,如果您设置 max 属性,它将在表单提交时验证。
如果您尝试限制/验证电话号码,请使用 type="tel" attr/value。它遵循maxLength attr 并仅调出手机号码键盘(在现代浏览器中),您可以将输入限制为模式(即pattern="[0-9]{10}")。
【讨论】:
这段代码对我来说效果很好。
在type="number"的输入中,可以添加如下属性:
oninput="constrainUserInput(this.id)"
完整的输入将如下所示:
<input type="number" class="test_css" maxlength="4" oninput="constrainUserInput(this.id)" id="flight_number" name="number"/>
注意:您必须指定您的输入和 ID 才能使此方法起作用
然后您可以将以下 JavaScript 添加到您的 HTML 中,它基本上将任何超出您的 maxlength 属性的字符替换为空引号(基本上是删除它们):
function constrainUserInput(id) {
let input = document.getElementById(id);
let value = input.value;
if (value.length > input.maxLength) {
input.value = value.substring(0, input.maxLength);
}
}
【讨论】:
我会让这个简单易懂!
使用min='' 和max='' 代替type='number' 的maxlength(maxlength 旨在定义text 类型中字符串的最大字母数量)。
干杯
【讨论】:
我可以使用它存档它。
<input type="text" onkeydown="javascript: return event.keyCode === 8 || event.keyCode === 46 ? true : !isNaN(Number(event.key))" maxlength="4">
【讨论】:
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);">
【讨论】: