Ich verwende das Attribut oninput
, um das Feld input
automatisch so zu gestalten, dass beim Einfügen ein Tausendertrennzeichen entsteht, und es hat funktioniert.
Aber was ich erreichen möchte, ist, dass ich auch das Punktzeichen .
einfügen darf, da ich zwei Dezimalstellen erhalten möchte. Bisher funktioniert mein Code nicht:
function separator(input) {
let nums = input.value.replace(/,/g, '');
if(!nums)return;
input.value = parseFloat(nums).toLocaleString();
}
function addition() {
var number1 = document.getElementById('number1').value;
var number2 = document.getElementById('number2').value;
number1 = number1.replace(/[,]+/g, '');
number2 = number2.replace(/[,]+/g, '');
if (number1 == "")
number1 = 0;
if (number2 == "")
number2 = 0;
var result = parseFloat(number1) + parseFloat(number2);
result = result.toFixed(2);
if (!isNaN(result)) {
document.getElementById('total').value = result;
}
document.getElementById('total').onchange();
}
<table>
<tr>
<td><input onkeyup="addition()" oninput="separator(this)" type="text" id="number1" placeholder="123,456.16"></td>
<td>+</td>
<td><input onkeyup="addition()" oninput="separator(this)" type="text" id="number2" placeholder="123,456.16"></td>
<td>=</td>
<td><input onchange="separator(this);" type="text" name="total" id="total" placeholder="total" readonly></td>
</tr>
</table>
Obwohl ich das Feld input
mit dem Attribut type="text"
festgelegt habe, kann es immer noch keinen Punkt .
setzen .
Wie kann ich dieses Problem beheben?
1
frianH
12 Aug. 2020 im 23:41
2 Antworten
Beste Antwort
function seprator(input) {
let nums = input.value.replace(/,/g, '');
if (!nums || nums.endsWith('.')) return;
input.value = parseFloat(nums).toLocaleString();
}
<input type="text" id="inputSep" oninput="seprator(this)" placeholder="123,456,789"/>
1
hassan khademi
18 Aug. 2020 im 11:23
Lassen Sie den Browser die Arbeit für Sie mit Intl.NumberFormat
const $input = document.querySelector('input');
const $output = document.querySelector('div');
$input.addEventListener('input', (evt) => {
$output.innerText = Intl.NumberFormat().format(evt.target.value);
});
<input>
<div></div>
Sie können viele Dinge über das Format der ausgegebenen Nummer anpassen, und in Ihrem Fall möchten Sie möglicherweise die Einstellungen minimumFractionDigits
oder maximumFractionDigits
anpassen:
const $input = document.querySelector('input');
const $output = document.querySelector('div');
$input.addEventListener('input', (evt) => {
$output.innerText = Intl.NumberFormat(undefined, {
maximumFractionDigits: 2
}).format(evt.target.value);
})
<input>
<div></div>
0
Impirator
12 Aug. 2020 im 20:57