L' maxlength
attributo non funziona con <input type="number">
. Questo succede solo in Chrome.
<input type="number" class="test_css" maxlength="4" id="flight_number" name="number"/>
L' maxlength
attributo non funziona con <input type="number">
. Questo succede solo in Chrome.
<input type="number" class="test_css" maxlength="4" id="flight_number" name="number"/>
Risposte:
Dalla documentazione di MDN per<input>
Se il valore del tipo di attributo è
text
,search
,password
,tel
, ourl
, questo attributo specifica il numero massimo di caratteri (in punti di codice Unicode) che l'utente può inserire; per altri tipi di controllo, viene ignorato.
Quindi maxlength
viene ignorato <input type="number">
dal design.
A seconda delle tue esigenze, puoi utilizzare gli attributi min
e max
come inon suggerito nella sua risposta (NB: questo definirà solo un intervallo limitato, non la lunghezza effettiva del valore del valore, sebbene da -9999 a 9999 coprirà tutti 0-4 numeri numerici) oppure puoi utilizzare un normale input di testo e applicare la convalida sul campo con il nuovo pattern
attributo:
<input type="text" pattern="\d*" maxlength="4">
type=number
all'input impostando l' max
attributo. Questo attributo limita solo il numero scelto dallo spinner dell'input.
\d*
qui?
regex
e il pattern sono incredibilmente creativi. Ma nei dispositivi mobili, non è diverso Android
o iOS
è un text
input, quindi causa un cattivo UX
.
La lunghezza massima non funzionerà <input type="number"
nel modo migliore che conosco sia utilizzare l' oninput
evento per limitare la lunghezza massima. Si prega di consultare il codice qui sotto.
<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)"
Dovrei solo funzionare
<input type="number">
stackoverflow.com/questions/18510845/...
Molti ragazzi hanno pubblicato un onKeyDown()
evento che non funziona affatto, cioè non è possibile eliminare una volta raggiunto il limite. Quindi, invece di onKeyDown()
utilizzare onKeyPress()
e funziona perfettamente.
Di seguito è riportato il codice di lavoro:
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
tipo di input html5
Ho due modi per farlo
Primo: usa type="tel"
, funzionerà come type="number"
su cellulare e accetta maxlength:
<input type="tel" />
Secondo: usa un po 'di JavaScript:
<!-- maxlength="2" -->
<input type="tel" onKeyDown="if(this.value.length==2 && event.keyCode!=8) return false;" />
È possibile utilizzare gli attributi min e max .
Il seguente codice fa lo stesso:
<input type="number" min="-999" max="9999"/>
9999
l'utente può digitare manualmente un numero che supera tale lunghezza.
Cambia il tipo di input in testo e usa l'evento "oninput" per chiamare la funzione:
<input type="text" oninput="numberOnly(this.id);" class="test_css" maxlength="4" id="flight_number" name="number"/>
Ora usa Javascript Regex per filtrare l'input dell'utente e limitarlo solo ai numeri:
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, "");
}
Una volta ho avuto lo stesso problema e ho trovato questa soluzione rispetto alle mie esigenze. Potrebbe aiutare qualcuno.
<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;"
/>
Happy Coding :)
Puoi provare anche questo per input numerici con limitazione di lunghezza
<input type="tel" maxlength="4" />
tel
input verrà automaticamente convalidato come tale e in alcuni casi strani i principali 0
s verranno cambiati in 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;">
DEMO - JSFIDDLE
Ecco la mia soluzione con jQuery ... Devi aggiungere la massima lunghezza al tuo tipo di input = numero
$('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;
});
E gestisci copia e incolla:
$('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);
});
Spero che aiuti qualcuno.
this.value = this.value.slice(0, this.maxLength);
pensi che questo abbia qualche problema? Non ne ho trovato finora. Copre anche il testo incollato.
Nella mia esperienza, la maggior parte dei problemi in cui le persone chiedono perché maxlength
viene ignorato è perché l'utente è autorizzato a inserire più del numero "consentito" di caratteri.
Come altri commenti hanno affermato, gli type="number"
input non hanno un maxlength
attributo e, invece, hanno un attributo min
e max
.
Affinché il campo limiti il numero di caratteri che possono essere inseriti consentendo all'utente di essere a conoscenza di questo prima che il modulo sia inviato (il browser dovrebbe identificare il valore> max altrimenti), dovrai (almeno per ora) aggiungere un ascoltatore del campo.
Ecco una soluzione che ho usato in passato: http://codepen.io/wuori/pen/LNyYBM
So che c'è già una risposta, ma se vuoi che il tuo input si comporti esattamente come l' maxlength
attributo o il più vicino possibile, usa il seguente codice:
(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 (tecnicamente, Blink) non implementerà la massima lunghezza per <input type="number">
.
La specifica HTML5 afferma che maxlength è applicabile solo ai tipi testo, url, e-mail, ricerca, telefono e password.
La soluzione assoluta che ho appena provato è:
<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" />
Lo renderò veloce e facile da capire!
Invece di maxlength per type='number'
(maxlength ha lo scopo di definire la quantità massima di lettere per una stringa in un text
tipo), usare min=''
e max=''
.
Saluti
<input type="number">
è solo questo ... un input numerico (anche se non convertito da una stringa a float tramite Javascript).
Immagino che non limiti i caratteri sull'inserimento dei tasti da maxLength
parte del tuo utente, altrimenti il tuo utente potrebbe rimanere bloccato in una "trappola chiave" se all'inizio avesse dimenticato un decimale (prova a inserire un .
indice 1
quando <input type"text">
è già stato raggiunto un attr "maxLength" ). Verrà comunque convalidato all'invio del modulo se si imposta un max
attributo.
Se stai cercando di limitare / convalidare un numero di telefono, usa type="tel"
attr / value. Obbedisce maxLength
all'attrazione e fa apparire solo la tastiera numerica mobile (nei browser moderni) e puoi limitare l'input a un modello (cioè pattern="[0-9]{10}"
).
maxlenght - tipo di testo di input
<input type="email" name="email" maxlength="50">
usando jQuery:
$("input").attr("maxlength", 50)
maxlenght - numero del tipo di input
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"
è un nuovo tipo dalla specifica HTML 5. Se il browser che si sta testando in non riconoscetype="number"
lo tratterà cometype="text"
, che fa rispettare l'maxlength
attributo. Questo potrebbe spiegare il comportamento che stai vedendo.