JSFiddle - React, Tailwind, and code Playground
HTML
<input type="number" id="field" keyup="keyUpFunction" step="0.01" placeholder="Field for both comma separators">
<span id="result" >
<span >Current value: </span><span id="number"></span>
</span>
CSS
#result{
padding: 10px;
background-color: orange;
font-size: 25px;
width: 400px;
margin-top: 10px;
display: inline-block;
}
#field{
padding: 5px;
border-radius: 5px;
border: 1px solid grey;
width: 400px;
}
JavaScript
var currentString = '';
var badState = false;
var lastCharacter = null;
document.getElementById("field").addEventListener("keyup",($event) => {
if ($event.target.value && !$event.target.validity.badInput) {
currentString = $event.target.value;
} else if ($event.target.validity.badInput) {
if (badState && lastCharacter && lastCharacter.match(/[\.,]/) && !isNaN(+$event.key)) {
$event.target.value = ((+currentString) + (+$event.key / 10));
badState = false;
} else {
badState = true;
}
}
document.getElementById("number").textContent = $event.target.value;
lastCharacter = $event.key;
});
document.getElementById("field").addEventListener("blur",($event) => {
if (badState) {
$event.target.value = (+currentString);
badState = false;
document.getElementById("number").textContent = $event.target.value;
}
});