El atributo max no funciona en el navegador Chrome en la tableta Android.
Foreever
44
@ ÜnsalKorkmaz: esa solución tiene la desventaja de que no muestra el teclado numérico en los dispositivos Android
será
Respuestas:
340
Y puede agregar un maxatributo que especificará el número más alto posible que puede insertar
<inputtype="number"max="999"/>
si agrega tanto a maxcomo un minvalor, puede especificar el rango de valores permitidos:
<inputtype="number"min="1"max="999"/>
Lo anterior aún no impedirá que un usuario ingrese manualmente un valor fuera del rango especificado. En su lugar, se mostrará una ventana emergente que le indicará que ingrese un valor dentro de este rango al enviar el formulario como se muestra en esta captura de pantalla:
Krister, esto funcionó. También como @Andy dijo que he usado la entrada para cortar los números adicionales. Referencia mathiasbynens.be/notes/oninput
Prasad
77
@Prasad: si la respuesta de Andy es correcta, selecciónela en lugar de la más votada.
Moshe
81
Esto es correcto, pero debe tenerse en cuenta que Andy afirma que esto no restringe a uno de escribir un número más largo. Por lo tanto, no es realmente el equivalente de maxlength en un campo de texto.
DA.
99
Si simplemente ingresó un flotador de mayor precisión, esto se romperá. Por ejemplo, 3.1415926 evita esto porque es menor que 999 y mayor que 1.
0112
44
¡No sé por qué esto es tan votado y aceptado cuando simplemente no funciona! Solo afecta a los controles "spinner" y no hace nada para evitar que el usuario escriba un número largo.
Codemonkey
115
Puede especificar los atributos miny max, que permitirán la entrada solo dentro de un rango específico.
<!-- equivalent to maxlength=4 --><inputtype="number"min="-9999"max="9999">
Sin embargo, esto solo funciona para los botones de control giratorio. Aunque el usuario puede escribir un número mayor que el permitido max, el formulario no se enviará.
Captura de pantalla tomada de Chrome 15
Usted puede utilizar el HTML5 oninputevento en JavaScript para limitar el número de caracteres:
Un posible problema con ese enfoque de JavaScript: puede que no funcione como se esperaba si el punto de inserción no está al final del valor. Por ejemplo, si ingresa el valor "1234" en el campo de entrada, luego mueve el punto de inserción al principio del valor y escribe "5", termina con el valor "5123". Esto es diferente a un campo input type = "text" con una longitud máxima de 4, donde el navegador no le permite escribir un quinto carácter en el campo "full", y el valor permanecería "1234".
Jon Schneider
@Andy, obviamente la pregunta está buscando una forma de hacer que no sea JS maxlength.............
Pacerier
44
@Pacerier: ¿algo en mi respuesta implica que pensé lo contrario? Como puede ver, ofrecí la solución más cercana posible que se puede lograr usando solo HTML, junto con una sugerencia adicional que usa JavaScript donde el OP podría haber querido evitar que el usuario escriba más caracteres de los permitidos.
Andy E
84
Si está buscando una solución web móvil en la que desea que su usuario vea un teclado numérico en lugar de un teclado de texto completo. Use type = "tel". Funcionará con maxlength, lo que le ahorrará la creación de javascript adicional.
Max y Min todavía permitirán al usuario escribir números que excedan max y min, lo que no es óptimo.
Gran descubrimiento, esto funcionó de maravilla, aprobado por no tener que crear el javascript adicional.
Diego
99
Descubrí que esta no es la mejor solución para la entrada numérica porque una entrada "tel" permite símbolos adicionales y muestra letras al lado de cada número. El teclado puramente numérico se ve mucho más limpio.
hawkharris
@hawkharris Tienes razón, type = "number" es la interfaz de usuario más limpia. Es más fácil escribir accidentalmente un carácter incorrecto. Por lo tanto, se necesita una validación adicional para garantizar que el usuario no ingrese datos incorrectos. Pero también considere que el usuario podría ingresar fácilmente todos los puntos decimales con un teclado numérico. Además, no resuelve la pregunta anterior sin JavaScript adicional.
Duane
1
Gracias, estoy trabajando en la aplicación móvil de marco iónico y esto resolvió mi problema
Ahmed
1
si se usa con pattern = "[0-9] *", los símbolos adicionales se deshabilitarán
apereira
71
Puede combinar todos estos de esta manera:
<inputname="myinput_drs"oninput="maxLengthCheck(this)"type="number"maxlength="3"min="1"max="999"/><script>// This is an old version, for a more recent version look at// https://jsfiddle.net/DRSDavidSoft/zb4ft1qq/2/function maxLengthCheck(object){if(object.value.length > object.maxLength)
object.value = object.value.slice(0, object.maxLength)}</script>
Actualizar: es posible que también desee evitar que se ingresen caracteres no numéricos, ya object.lengthque sería una cadena vacía para las entradas numéricas y, por lo tanto, su longitud sería 0. Por lo tanto, la maxLengthCheckfunción no funcionará.
Esta es una buena solución, pero creo que object.value.length devuelve 0 si hay valores no numéricos ingresados.
Andrew
1
@AndrewSpear Eso se debe a que object.value sería una cadena vacía si ingresa valores no numéricos en las entradas con un tipo de conjunto de 'números'. Ver la documentación. Además, lea mi actualización para solucionar este problema.
David Refoua
Esto aún se rompe si ingresa más de un punto decimal, como 111..1111. No use este código por seguridad, ya que aún puede pasar código malicioso.
PieBie
@PieBie Dude, este código es para hace más de 3 años. Use jQuery en su lugar.
David Refoua
1
Sí, lo sé, pero los principiantes podrían copiarlo y pegarlo.
PieBie
26
es muy simple, con algunos javascript puedes simular maxlength, échale un vistazo:
El problema keydownes que no puede usar la tecla de retroceso en caracteres máximos. El problema keypresses que puede copiar y pegar más allá de los caracteres máximos.
Stavm
23
O si su valor máximo es, por ejemplo, 99 y mínimo 0, puede agregar esto al elemento de entrada (su valor será reescrito por su valor máximo, etc.)
El atributo de patrón no es compatible con IE9 y versiones anteriores, y tiene soporte parcial en Safari: caniuse.com/#feat=input-pattern
diazdeteran
Sí, gracias por señalar, pero abandonamos el soporte de IE9 (cortando la mostaza), y lo prefiero a los métodos JS. Depende del proyecto.
Chris Panayotoff
2
No se impide que un usuario ingrese caracteres no numéricos con esto. Pueden ingresar 2 de cualquier personaje. La patternúnica causa el resaltado de validación.
brt
probado en Android 9 (Nokia 8) pero obtengo el teclado normal :( ¿alguna idea?
oriadam
14
//For Angular I have attached following snippet.
<divng-app=""><form>
Enter number: <inputtype="number"ng-model="number"onKeyPress="if(this.value.length==7)returnfalse;"min="0"></form><h1>You entered: {{number}}</h1></div>
Si utiliza el evento "onkeypress", no obtendrá ninguna limitación de usuario como tal durante el desarrollo (prueba de unidad). Y si tiene un requisito que no permite que el usuario ingrese después de un límite particular, eche un vistazo a este código e intente una vez.
Los problemas que veo aquí son: 1. reemplazar con seleccionar el texto y el tipo no funciona si la entrada ha alcanzado 7 números 2. aumentar la entrada en 1 cuando el desbordamiento "boarder" golpea funciona -> 9999999 y hacer clic arriba botón. Rompe la limitación
Edub
Intenté con la versión simple javascript. Si lo desea, puede ver usando Ejecutar fragmento de código. Como tal, no encontré ninguna limitación.
Prasad Shinde
1
Tampoco encontré ninguna limitación. Se detiene en 7 dígitos. Estoy usando esta solución para mi código.
Claudio
Hay una limitación. Cuando llegue al límite, seleccione todos y desee reemplazarlos, no funciona. El reemplazo funciona para mí solo cuando sobrescribo el valor con la curva antes de devolver falso.
Insomnia88
@ Insomnia88, @ edub ¿y si escribimos la función y verificamos las condiciones necesarias ...
Prasad Shinde
12
Otra opción es simplemente agregar un oyente para cualquier cosa con el atributo maxlength y agregarle el valor de corte. Asumiendo que el usuario no quiere usar una función dentro de cada evento relacionado con la entrada. Aquí hay un fragmento de código. Ignora el código CSS y HTML, el JavaScript es lo que importa.
// Reusable Function to Enforce MaxLengthfunction enforce_maxlength(event){var t = event.target;if(t.hasAttribute('maxlength')){
t.value = t.value.slice(0, t.getAttribute('maxlength'));}}// Global Listener for anything with an maxlength attribute.// I put the listener on the body, put it on whatever.
document.body.addEventListener('input', enforce_maxlength);
<labelfor="test_input">Text Input</label><inputid="test_input"type="text"maxlength="5"/><span>set to 5 maxlength</span><br><labelfor="test_input">Number Input</label><inputid="test_input"type="number"min="0"max="99"maxlength="2"/><span>set to 2 maxlength, min 0 and max 99</span>
La longitud máxima no funcionará de <input type="number"la mejor manera que sé, es usar el oninputevento para limitar la longitud máxima. Consulte el siguiente código para una implementación simple.
<inputname="somename"oninput="javascript: if (this.value.length > this.maxLength) this.value = this.value.slice(0, this.maxLength);"
type = "number"
maxlength = "6"
/>
Como lo han dicho otros, min / max no es lo mismo que maxlength porque las personas aún podrían ingresar un flotante que sería más grande que la longitud máxima de cadena que usted pretendía. Para emular verdaderamente el atributo maxlength, puede hacer algo como esto en un apuro (esto es equivalente a maxlength = "16"):
slice eliminará caracteres sin conocimiento del usuario final cuando se inserte en el medio. mientras que max-length se bloqueará.
Pradeep Kumar Prabaharan
@PradeepKumarPrabaharan maxlengthno es compatible con entradas numéricas. En mi ejemplo, value.slice(0,16)no se activará a menos que el valor de entrada sea mayor a 16 caracteres.
thdoan
sí maxlength no es compatible con entradas de números ... este código es gud pero este código no coincide exactamente con la propiedad de maxlength ..
Pradeep Kumar Prabaharan
@TobiasGaertner type="number"se encarga de eso :).
thdoan
@ 10basetom ... dependiendo del navegador ... por ejemplo, en FF aún puede ingresar caracteres y no se detendrán después del límite, pero en relación con la idea del número de tipo, esta es una solución aceptable.
Tobias Gaertner
6
La respuesta de Maycow Moura fue un buen comienzo. Sin embargo, su solución significa que cuando ingresa el segundo dígito se detiene toda la edición del campo. Por lo tanto, no puede cambiar los valores ni eliminar ningún carácter.
El siguiente código se detiene en 2, pero permite que continúe la edición;
$("input[name='minutes']").on('keyup keypress blur change',function(e){//return false if not 0-9if(e.which !=8&& e.which !=0&&(e.which <48|| e.which >57)){returnfalse;}else{//limit length but allow backspace so that you can still delete the numbers.if( $(this).val().length >= parseInt($(this).attr('maxlength'))&&(e.which !=8&& e.which !=0)){returnfalse;}}});
No sé si los eventos son un poco exagerados, pero resolvió mi problema.
JSfiddle
no funciona en Android Chrome. onkeypress tiene algunos problemas con esto.
Aakash Thakur
3
Al igual que con type="number", especifica una propiedad en maxlugar de una maxlength, que es el número máximo posible. Entonces, con 4 dígitos, maxdebe ser 9999, 5 dígitos 99999y así sucesivamente.
Además, si desea asegurarse de que sea un número positivo, puede establecerlo min="0", asegurando números positivos.
no responde correctamente la pregunta, pero votó porque resolvió mi problema :)
TrOnNe
2
Como puede observar, no se puede utilizar cualquiera de onkeydown, onkeypresso onkeyupeventos de una solución completa, incluyendo los navegadores móviles. Por cierto, onkeypressestá en desuso y ya no está presente en Chrome / Opera para Android (ver: UI Events W3C Working Draft, 04 de agosto de 2016 ).
Descubrí una solución usando oninputsolo el evento. Es posible que tenga que hacer una verificación de número adicional según sea necesario, como un signo negativo / positivo o separadores decimales y de miles y similares, pero como comienzo, lo siguiente debería ser suficiente:
function checkMaxLength(event){// Prepare to restore the previous value.if(this.oldValue ===undefined){this.oldValue =this.defaultValue;}if(this.value.length >this.maxLength){// Set back to the previous value.this.value = oldVal;}else{// Store the previous value.this.oldValue =this.value;// Make additional checks for +/- or ./, etc.// Also consider to combine 'maxlength'// with 'min' and 'max' to prevent wrong submits.}}
@tiltdown Sry para mistype. Corrigió la respuesta.
shinobi
1
Sé que ya hay una respuesta, pero si desea que su entrada se comporte exactamente como el maxlengthatributo o lo más cerca posible, use el siguiente código:
(function($){
methods ={/*
* addMax will take the applied element and add a javascript behavior
* that will set the max length
*/
addMax:function(){// set variablesvar
maxlAttr = $(this).attr("maxlength"),
maxAttR = $(this).attr("max"),
x =0,
max ="";// If the element has maxlength apply the code.if(typeof maxlAttr !==typeofundefined&& maxlAttr !==false){// create a max equivelantif(typeof maxlAttr !==typeofundefined&& maxlAttr !==false){while(x < maxlAttr){
max +="9";
x++;}
maxAttR = max;}// Permissible Keys that can be used while the input has reached maxlengthvar keys =[8,// backspace9,// tab13,// enter46,// delete37,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 textif($(this).val().length == maxlAttr && $.inArray(event.which, keys)==-1&& methods.isTextSelected()==false)returnfalse;});;}},/*
* 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();}elseif(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();
@Phill_t tal vez me puedas iluminar? Usé su código y está funcionando bien en el principal PERO "$ (this) .attr (" maxlength ")" siempre entrega 2. Y por qué sería mejor usar "$ (this) .attr (" maxlength ")" si estaba funcionando en lugar de solo "this.maxlength" que probé y estaba funcionando como se esperaba y es más corto y también más claro de leer? ¿Yo me perdí algo?
Markus s
¿Qué quieres decir con "entrega 2"?
Philll_t
Phill_t mis disculpas. "this.maxLength" solo funciona en el ámbito de la función keydown. En la función "addMax", "este" es el documento en lugar del elemento esperado y, por lo tanto, tiene valores de atributo diferentes. ¿Cómo obtendría acceso a la entrada del número? ¿El código anterior realmente funciona de tu lado? Probé con Chrome / Opera / Vivaldi, Firefox, Edge, IE y Safari y obtuve los mismos resultados para cada navegador. Bien, en Edge maxlegth = "1" y maxlength = "2" donde realmente funciona pero "$ (this) .attr (" maxlength ")" no aumentan más para un número mayor !! @anybody: ¿Alguna sugerencia?
Markus s
Como dije, siempre son dos porque aparece en el documento y no en el elemento en cuestión, como descubrí cuando lo estaba depurando. Por cierto, es posible que también desee ver mi solución, que descubrí después de estudiar la suya: stackoverflow.com/a/41871960/1312012
markus s
0
Los atributos más relevantes para usar serían miny max.
Con un poco de javascript, puede buscar todas las entradas locales de fecha y hora, buscar si el año que el usuario intenta ingresar, más de 100 años en el futuro:
$('input[type=datetime-local]').each(function( index ){
$(this).change(function(){var today =newDate();var date =newDate(this.value);var yearFuture =newDate();
yearFuture.setFullYear(yearFuture.getFullYear()+100);if(date.getFullYear()> yearFuture.getFullYear()){this.value= today.getFullYear()+this.value.slice(4);}})});
Respuestas:
Y puede agregar un
max
atributo que especificará el número más alto posible que puede insertarsi agrega tanto a
max
como unmin
valor, puede especificar el rango de valores permitidos:Lo anterior aún no impedirá que un usuario ingrese manualmente un valor fuera del rango especificado. En su lugar, se mostrará una ventana emergente que le indicará que ingrese un valor dentro de este rango al enviar el formulario como se muestra en esta captura de pantalla:
fuente
Puede especificar los atributos
min
ymax
, que permitirán la entrada solo dentro de un rango específico.Sin embargo, esto solo funciona para los botones de control giratorio. Aunque el usuario puede escribir un número mayor que el permitido
max
, el formulario no se enviará.Captura de pantalla tomada de Chrome 15
Usted puede utilizar el HTML5
oninput
evento en JavaScript para limitar el número de caracteres:fuente
maxlength
.............Si está buscando una solución web móvil en la que desea que su usuario vea un teclado numérico en lugar de un teclado de texto completo. Use type = "tel". Funcionará con maxlength, lo que le ahorrará la creación de javascript adicional.
Max y Min todavía permitirán al usuario escribir números que excedan max y min, lo que no es óptimo.
fuente
Puede combinar todos estos de esta manera:
Actualizar:
es posible que también desee evitar que se ingresen caracteres no numéricos, ya
object.length
que sería una cadena vacía para las entradas numéricas y, por lo tanto, su longitud sería0
. Por lo tanto, lamaxLengthCheck
función no funcionará.Solución:
ver esto o esto para ver ejemplos.
Manifestación : vea la versión completa del código aquí:
http://jsfiddle.net/DRSDavidSoft/zb4ft1qq/1/
Actualización 2: Aquí está el código de actualización: https://jsfiddle.net/DRSDavidSoft/zb4ft1qq/2/
Actualización 3: Tenga en cuenta que permitir que se ingrese más de un punto decimal puede alterar el valor numérico.
fuente
es muy simple, con algunos javascript puedes simular
maxlength
, échale un vistazo:fuente
keydown
es que no puede usar la tecla de retroceso en caracteres máximos. El problemakeypress
es que puede copiar y pegar más allá de los caracteres máximos.O si su valor máximo es, por ejemplo, 99 y mínimo 0, puede agregar esto al elemento de entrada (su valor será reescrito por su valor máximo, etc.)
Luego (si lo desea), puede verificar si la entrada es realmente número
fuente
onKeyUp="if(this.value>this.max)this.value=this.max;if(this.value<this.min)this.value=this.min;"
Puede especificarlo como texto, pero agregar pettern, que solo coinciden con los números:
Funciona perfecto y también en dispositivos móviles (probado en iOS 8 y Android) destaca el teclado numérico.
fuente
pattern
única causa el resaltado de validación.Si utiliza el evento "onkeypress", no obtendrá ninguna limitación de usuario como tal durante el desarrollo (prueba de unidad). Y si tiene un requisito que no permite que el usuario ingrese después de un límite particular, eche un vistazo a este código e intente una vez.
fuente
Otra opción es simplemente agregar un oyente para cualquier cosa con el atributo maxlength y agregarle el valor de corte. Asumiendo que el usuario no quiere usar una función dentro de cada evento relacionado con la entrada. Aquí hay un fragmento de código. Ignora el código CSS y HTML, el JavaScript es lo que importa.
fuente
La longitud máxima no funcionará de
<input type="number"
la mejor manera que sé, es usar eloninput
evento para limitar la longitud máxima. Consulte el siguiente código para una implementación simple.fuente
Digamos que desea que el valor máximo permitido sea 1000, ya sea escrito o con la ruleta.
Restringe los valores de la ruleta usando:
type="number" min="0" max="1000"
y restringir lo que escribe el teclado con javascript:
onkeyup="if(parseInt(this.value)>1000){ this.value =1000; return false; }
"fuente
Como lo han dicho otros, min / max no es lo mismo que maxlength porque las personas aún podrían ingresar un flotante que sería más grande que la longitud máxima de cadena que usted pretendía. Para emular verdaderamente el atributo maxlength, puede hacer algo como esto en un apuro (esto es equivalente a maxlength = "16"):
fuente
maxlength
no es compatible con entradas numéricas. En mi ejemplo,value.slice(0,16)
no se activará a menos que el valor de entrada sea mayor a 16 caracteres.type="number"
se encarga de eso :).La respuesta de Maycow Moura fue un buen comienzo. Sin embargo, su solución significa que cuando ingresa el segundo dígito se detiene toda la edición del campo. Por lo tanto, no puede cambiar los valores ni eliminar ningún carácter.
El siguiente código se detiene en 2, pero permite que continúe la edición;
fuente
Tuve este problema antes y lo resolví usando una combinación de tipo de número html5 y jQuery.
guión:
No sé si los eventos son un poco exagerados, pero resolvió mi problema. JSfiddle
fuente
Entrada HTML
jQuery
fuente
Una forma sencilla de establecer la longitud máxima para las entradas numéricas es:
fuente
Al igual que con
type="number"
, especifica una propiedad enmax
lugar de unamaxlength
, que es el número máximo posible. Entonces, con 4 dígitos,max
debe ser9999
, 5 dígitos99999
y así sucesivamente.Además, si desea asegurarse de que sea un número positivo, puede establecerlo
min="0"
, asegurando números positivos.fuente
Ugh Es como si alguien renunciara a la mitad de la implementación y pensó que nadie se daría cuenta.
Por alguna razón, las respuestas anteriores no usan los atributos
min
ymax
. Este jQuery lo termina:Probablemente también funcionaría como una función con nombre "entrada" sin jQuery si es uno de esos tipos de "jQuery-is-the-devil".
fuente
Como puede observar, no se puede utilizar cualquiera de
onkeydown
,onkeypress
oonkeyup
eventos de una solución completa, incluyendo los navegadores móviles. Por cierto,onkeypress
está en desuso y ya no está presente en Chrome / Opera para Android (ver: UI Events W3C Working Draft, 04 de agosto de 2016 ).Descubrí una solución usando
oninput
solo el evento. Es posible que tenga que hacer una verificación de número adicional según sea necesario, como un signo negativo / positivo o separadores decimales y de miles y similares, pero como comienzo, lo siguiente debería ser suficiente:También recomendaría combinar
maxlength
conmin
ymax
para evitar que somete equivocadas como se ha dicho varias veces.fuente
o si no quieres poder ingresar nada
fuente
También puede probar esto para la entrada numérica con restricción de longitud
fuente
Sé que ya hay una respuesta, pero si desea que su entrada se comporte exactamente como el
maxlength
atributo o lo más cerca posible, use el siguiente código:fuente
Los atributos más relevantes para usar serían
min
ymax
.fuente
Esto podría ayudar a alguien.
Con un poco de javascript, puede buscar todas las entradas locales de fecha y hora, buscar si el año que el usuario intenta ingresar, más de 100 años en el futuro:
fuente