¿Hay un tipo de entrada flotante en HTML5?
Según html5.org, el atributo "value" del tipo de entrada "number", si se especifica y no está vacío, debe tener un valor que sea un número de coma flotante válido."
Sin embargo, es simplemente (en la última versión de Chrome, de todos modos), un" updown " control con números enteros, no flota:
<input type="number" id="totalAmt"></input>
¿Hay un elemento de entrada de coma flotante nativo de HTML5, o una forma de hacer que el tipo de entrada de número funcione con flotadores, no ints? O debo recurrir a una interfaz de usuario de jQuery plugin?
7 answers
El tipo number
tiene un valor step
que controla qué números son válidos (junto con max
y min
), que por defecto es 1
. Este valor también es utilizado por las implementaciones para los botones paso a paso(es decir, presionando hacia arriba aumenta por step
).
Simplemente cambie este valor a lo que sea apropiado. Para el dinero, probablemente se esperan dos decimales:
<input type="number" step="0.01">
(También establecería min=0
si solo puede ser positivo)
Si prefiere permitir cualquier número de decimales, usted puede usar step="any"
(aunque para las monedas, recomendaría apegarse a 0.01
). En Chrome y Firefox, los botones paso a paso se incrementarán / disminuirán en 1 cuando se use any
. (gracias a la respuesta de Michal Stefanow por señalar any
, y ver la especificación relevante aquí )
Aquí hay un patio de juegos que muestra cómo varios pasos afectan a varios tipos de entrada:
<form>
<input type=number step=1 /> Step 1 (default)<br />
<input type=number step=0.01 /> Step 0.01<br />
<input type=number step=any /> Step any<br />
<input type=range step=20 /> Step 20<br />
<input type=datetime-local step=60 /> Step 60 (default)<br />
<input type=datetime-local step=1 /> Step 1<br />
<input type=datetime-local step=any /> Step any<br />
<input type=datetime-local step=0.001 /> Step 0.001<br />
<input type=datetime-local step=3600 /> Step 3600 (1 hour)<br />
<input type=datetime-local step=86400 /> Step 86400 (1 day)<br />
<input type=datetime-local step=70 /> Step 70 (1 min, 10 sec)<br />
</form>
Como de costumbre, agregaré una nota rápida: recuerde que la validación del lado del cliente es solo una comodidad para el usuario. También debe validar en el lado del servidor!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-09 16:01:57
Vía: http://blog.isotoma.com/2012/03/html5-input-typenumber-and-decimalsfloats-in-chrome /
Pero ¿qué pasa si quieres que todos los números sean válidos, enteros y decimales por igual? En este caso, establezca el paso en"any"
<input type="number" step="any" />
Funciona para mí en Chrome, no probado en otros navegadores.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-23 21:25:53
Basado en esta respuesta
<input type="text" id="sno" placeholder="Only float with dot !"
onkeypress="return (event.charCode >= 48 && event.charCode <= 57) ||
event.charCode == 46 || event.charCode == 0 ">
Significado:
Código Char:
- 48-57 igual a
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
- 0 es
Backspace
(de lo contrario necesita actualizar la página en Firefox) - 46 es
dot
&&
es AND
, ||
es el operador OR
.
Si intentas flotar con coma:
<input type="text" id="sno" placeholder="Only float with comma !"
onkeypress="return (event.charCode >= 48 && event.charCode <= 57) ||
event.charCode == 44 || event.charCode == 0 ">
Compatible con Chromium y Firefox(Linux X64) (otros navegadores I no existe.)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:18:30
Puedes usar:
<input type="number" step="any" min="0" max="100" value="22.33">
Espero ayudar, saludos
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-15 18:39:13
Lo hago
<input id="relacionac" name="relacionac" type="number" min="0.4" max="0.7" placeholder="0,40-0,70" class="form-control input-md" step="0.01">
Entonces, defino min en 0.4 y max en 0.7 con el paso 0.01: 0.4, 0.41, 0,42 ... 0.7
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-13 14:26:54
Puede usar el atributo step para el número de tipo de entrada:
<input type="number" id="totalAmt" step="0.1"></input>
step="any"
permitirá cualquier decimal.step="1"
no permitirá decimales.step="0.5"
permitirá 0.5; 1; 1.5;...step="0.1"
permitirá 0.1; 0.2; 0.3; 0.4; ...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-25 19:46:54
Acabo de tener el mismo problema, y podría solucionarlo poniendo una coma y no un punto/punto en el número debido a la localización en francés.
Así que funciona con:
2 está bien
2,5 está bien
2.5 es KO (El número se considera "ilegal" y recibe un valor vacío).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-02 15:06:22