El number
tipo tiene un step
valor que controla qué números son válidos (junto con max
y min
), que por defecto es 1
. Este valor también lo usan las implementaciones para los botones paso a paso (es decir, presionar hacia arriba aumenta en step
).
Simplemente cambie este valor a lo que sea apropiado. Por 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, puede usar step="any"
(aunque para las monedas, le recomiendo que se quede 0.01
). En Chrome y Firefox, los botones paso a paso aumentarán / disminuirán en 1 cuando se usen any
. (gracias a la respuesta de Michal Stefanow por señalar any
y ver la especificación relevante aquí )
Aquí hay un patio de recreo que muestra cómo varios pasos afectan a los distintos 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 conveniencia para el usuario. ¡También debe validar en el lado del servidor!