Добрый день. Есть такой JavaScript:
$(document).ready(function () {
const conversionFactors = {
"Килограммы": 1,
"Граммы": 0.001,
"Тонны": 1000,
"Центнер": 100,
"Миллиграмм": 1e-6,
"Сантиграмм": 0.01,
"Микрограмм": 1e-9,
"Килотонна": 1e6,
"Килоньютон на Земле": 101.971621,
"Ньютон на Земле": 0.101971621,
"Карат": 0.0002,
"Атомная масса": 1.66e-24,
"Фунт": 0.45359237,
"Унция": 0.028349523125,
"Гран": 0.00006479891,
"Стоун": 6.35029318
};
function convertToKilograms(value, unit) {
if (conversionFactors[unit] !== undefined) {
return value * conversionFactors[unit];
}
return 0;
}
function updateUnitValues(sourceElement, sourceValue) {
const parentRow = sourceElement.closest(".row.align-items-center");
const sourceLabel = parentRow.find(".custom-label").text();
const kilogramsValue = convertToKilograms(sourceValue, sourceLabel);
$("input[type='text']").each(function () {
const targetLabel = $(this).closest(".row.align-items-center").find(".custom-label").text();
const targetConversionFactor = conversionFactors[targetLabel];
if (typeof targetConversionFactor === "undefined") {
$(this).val("0");
} else {
const targetValue = kilogramsValue / targetConversionFactor;
$(this).val(targetValue.toLocaleString());
}
});
}
$("input[type='text']").on("input", function () {
const sourceValue = parseFloat($(this).val().replace(/[^\d.]/g, ''));
if (!isNaN(sourceValue)) {
updateUnitValues($(this), sourceValue);
} else {
$("input[type='text']").val("");
}
});
});
Есть инпуты, в которые пользователь вводит данные и они автоматически считаются и отображаются (перевод единиц измерения). Всё работает за исключением не целых чисел. Если я пытаюсь ввести после числа точку или запятую ничего не происходит.
Если я ввожу 14, а потом между ними ставлю запятую получается 1,4 и расчёты идут корректно. Если я добавляю 5, (хочу получить 1,45) тогда режется запятая и я получаю 145. Помогите поправить код, чтобы не целые числа работали и считались корректно.
Если я заменяю регулярку на
const sourceValue = parseFloat($(this).val().replace(/[^\d.,]/g, ''));
то есть добавляю запятую, тогда вообще становится неадекватное поведение у скрипта и он стирает данные при вводе и не дает ввести более 4 символов.