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"/>
Ответы:
Из документации MDN для<input>
Если значение типа атрибута
text
,search
,password
,tel
, илиurl
, этот атрибут определяет максимальное количество символов (в точках кода Unicode) , которые пользователь может ввести; для других типов управления это игнорируется.
Так что maxlength
это игнорируется <input type="number">
дизайном.
В зависимости от ваших потребностей, вы можете использовать min
и max
атрибуты , как ИНОН предложил в его / ее ответ (NB: это будет определить только ограниченный диапазон, а не фактическую длину символа значения, хотя -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)"
должен работать
<input type="number">
stackoverflow.com/questions/18510845/…
Многие ребята опубликовали 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
тип ввода html5
У меня есть два способа сделать это
Во-первых: используйте 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="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 к вашему типу ввода = число
$('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
.
Чтобы поле ограничивало количество символов, которое может быть вставлено, в то же время позволяя пользователю знать об этом до отправки формы (в противном случае браузер должен определить значение> 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();
Chrome (технически Blink) не будет реализовывать maxlength для <input type="number">
.
Спецификация HTML5 гласит, что maxlength применимо только к типам text, url, e-mail, search, tel и password.
Абсолютное решение, которое я только что попробовал:
<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" />
Я сделаю это быстро и легко понять!
Вместо maxlength для type='number'
(maxlength предназначено для определения максимального количества букв для строки в text
типе), используйте min=''
и max=''
.
ура
<input type="number">
это просто ... ввод числа (хотя и не преобразованный из строки, которая передается через Javascript).
Полагаю, это не ограничивает символы при вводе с клавиатуры, maxLength
иначе ваш пользователь может застрять в «ловушке ключа», если он забыл десятичную дробь в начале (попробуйте поместить .
в индекс, 1
когда <input type"text">
атрибут maxLength уже достигнут ). Однако он подтвердит отправку формы, если вы установите 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
атрибут. Это может объяснить поведение, которое вы видите.