maxlength
Nitelik ile çalışmıyor <input type="number">
. Bu yalnızca Chrome'da olur.
<input type="number" class="test_css" maxlength="4" id="flight_number" name="number"/>
maxlength
Nitelik ile çalışmıyor <input type="number">
. Bu yalnızca Chrome'da olur.
<input type="number" class="test_css" maxlength="4" id="flight_number" name="number"/>
Yanıtlar:
Gönderen için MDN belgelerine<input>
Değeri ise tip özelliğinde olup
text
,search
,password
,tel
, veyaurl
, bu özellik kullanıcının girebileceği (Unicode kod noktaları) maksimum karakter sayısını belirtir; diğer kontrol tipleri için yok sayılır.
Bu yüzden tasarım tarafından maxlength
göz ardı edilir <input type="number">
.
İhtiyaçlarınıza bağlı olarak, kullanabileceğiniz min
ve max
atıflarından Inon onun / onu cevabını önerildiği (Not: -9999 9999 tüm 0-4 kapsayacak gerçi bu sadece bir aralıkla, değerin değil gerçek bir karakter uzunluğunu tanımlayacaktır basamaklı sayılar) veya yeni bir pattern
özellikle normal bir metin girişi kullanabilir ve doğrulamayı zorunlu kılabilirsiniz :
<input type="text" pattern="\d*" maxlength="4">
type=number
ayarlayarak "klavye girişi" fiziksel uzunluğunu girişle sınırlayamazsınız max
. Bu özellik yalnızca girişin döndürücüsü tarafından seçilen sayıyı kısıtlar.
\d*
burada ne var
regex
ve desen inanılmaz derecede yaratıcı. Ancak mobilde, farklı değil Android
veya iOS
bu bir text
girdi , bu yüzden kötü bir duruma neden oluyor UX
.
Maksimum uzunluk, maksimum uzunluğu sınırlamak için olay <input type="number"
kullanmak olduğunu bildiğim en iyi yolla çalışmaz oninput
. Lütfen aşağıdaki koda bakınız.
<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)"
çalışması gerekir
<input type="number">
stackoverflow.com/questions/18510845/…
Birçok adam hiç çalışmayan bironKeyDown()
olay yayınladı yani sınıra ulaştığınızda silemezsiniz. Yani kullanmak yerine ve gayet iyi çalışıyor.onKeyDown()
onKeyPress()
Aşağıda çalışma kodu:
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
giriş türü tutarken diğer cevaplardan daha kısa ve çok daha iyi
Bunu yapmanın iki yolu var
İlk olarak type="tel"
, Kullanım , type="number"
mobil cihazlarda olduğu gibi çalışacak ve maksimum uzunluğu kabul edecektir:
<input type="tel" />
İkincisi: Biraz JavaScript kullanın:
<!-- maxlength="2" -->
<input type="tel" onKeyDown="if(this.value.length==2 && event.keyCode!=8) return false;" />
Sen kullanabilirsiniz min ve max özelliklerini.
Aşağıdaki kod aynı şeyi yapar:
<input type="number" min="-999" max="9999"/>
9999
, kullanıcının bu uzunluğu aşan bir sayıyı elle yazabileceği sayıyı aşamazsınız.
Giriş türünüzü metne değiştirin ve işlevi çağırmak için "oninput" olayını kullanın:
<input type="text" oninput="numberOnly(this.id);" class="test_css" maxlength="4" id="flight_number" name="number"/>
Şimdi kullanıcı girişini filtrelemek ve yalnızca sayılarla sınırlamak için Javascript Regex'i kullanın:
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, "");
}
Bir keresinde aynı problemle karşılaştım ve bu çözümü ihtiyaçlarıma göre buldum. Bazılarına yardımcı olabilir.
<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;"
/>
Mutlu Kodlama :)
<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;">
DEMO - JSFIDDLE
İşte benim jQuery ile benim çözüm ... Giriş türü = sayı maxlength eklemek zorunda
$('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;
});
Ve kopyalama ve yapıştırma işlemlerini gerçekleştirin:
$('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);
});
Umarım birine yardımcı olur.
this.value = this.value.slice(0, this.maxLength);
olduğunu düşünüyorum : Bunun herhangi bir sorun olduğunu düşünüyor musunuz? Şimdiye kadar bulamadım. Yapıştırılan metni de kapsar.
Deneyimlerime göre, insanların neden maxlength
göz ardı edildiğini sorduğu sorunların çoğu , kullanıcının "izin verilen" karakter sayısından daha fazlasını girmesine izin verilmesidir.
Diğer yorumların belirttiği gibi, type="number"
girdilerin bir maxlength
niteliği yoktur ve bunun yerine bir min
vemax
niteliği vardır.
Alanın, form gönderilmeden önce kullanıcının bunu bilmesine izin verirken eklenebilecek karakter sayısını sınırlaması için (tarayıcı değeri aksi takdirde> max belirtmelidir), (en azından şimdilik) dinleyici alanı.
İşte geçmişte kullandığım bir çözüm: http://codepen.io/wuori/pen/LNyYBM
Zaten bir yanıt olduğunu biliyorum, ancak girişinizin tam olarak maxlength
öznitelik gibi davranmasını veya olabildiğince yakın olmasını istiyorsanız, aşağıdaki kodu kullanın:
(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 (teknik olarak Blink) için maksimum uzunluk uygulamıyor<input type="number">
.
HTML5 belirtimi , makslength değerinin yalnızca metin, url, e-posta, arama, tel ve şifre türlerine uygulanabileceğini belirtir.
Son zamanlarda denediğim mutlak çözüm:
<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" />
Bunu hızlı ve kolay anlaşılır hale getireceğim!
İçin maxlength yerine type='number'
(maxlength, bir text
türdeki bir dize için maksimum harf miktarını tanımlamak içindir ) min=''
vemax=''
.
Şerefe
<input type="number">
sadece ... bir sayı girişi (bir dizeden Javascript aracılığıyla yüzdürülmesine rağmen).
Tahminimce, tuş girişindeki karakterleri kısıtlamıyor maxLength
veya başlangıcında bir ondalık unutmuşlarsa kullanıcınız bir "tuş tuzağına" sıkışmış olabilir ( Bir "maxLength" attr'e ulaşıldığında bir .
indeks koymayı deneyin ). Ancak, bir form ayarlarsanız form gönderimi doğrulanır.1
<input type"text">
max
özellik .
Bir telefon numarasını kısıtlamaya / doğrulamaya çalışıyorsanız, type="tel"
attr / değerini kullanın . Attreye uyuyor maxLength
ve sadece mobil numara klavyesini getiriyor (modern tarayıcılarda) ve girişi bir desenle kısıtlayabilirsiniz (yani pattern="[0-9]{10}"
).
maxlenght - giriş türü metni
<input type="email" name="email" maxlength="50">
jQuery kullanarak:
$("input").attr("maxlength", 50)
maxlenght - giriş tipi numarası
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 belirtiminden yeni bir tür olduğunu da unutmayın . İçinde test ediyoruz tarayıcı tanımazsatype="number"
onu tedavi edecek şekildetype="text"
hangi gelmez saygımaxlength
niteliği. Bu, gördüğünüz davranışı açıklayabilir.