Я использую маску ввода для поля ввода валюты (USD). Я также использую dinero.js для работы с числами с плавающей запятой, что требует передачи ему целого числа. Проблема заключается в том, что когда пользователь нажимает на поле ввода, вторая ноль после десятичной точки удаляется маской ввода, что приводит к неправильным значениям формы при преобразовании в целое число.
Это моя маска ввода:
$('body').on('focus', 'input.money', function(){
$(this).inputmask("numeric", {
radixPoint: ".",
groupSeparator: ",",
digits: 2,
autoGroup: true,
prefix: '$',
oncleared: function () { $(this).val(''); }
});
});
Когда форма отправлена, я убираю десятичную точку и просто передаю ее своей функции ajax, а если нет десятичной, я умножаю на 100 и передаю ее.
поэтому в описанном выше примере, если ввод предварительно заполняется $ 100,00 при загрузке страницы, а затем я нажимаю на него, он становится $ 100,0. Затем, если бы мне нужно было просто вернуться назад и ввести $ 10, он сохраняет значение .0, поэтому введенное значение составляет $ 10.0.
При отправке формы это удаляет десятичную дробь, и значение становится целочисленным значением 100, которое затем неправильно устанавливается как значение $ 10,00.
Надеюсь, это имеет смысл. Я планирую добавить проверку формы, чтобы перед отправкой формы было 2 знака после запятой, но это также беспокоит меня с точки зрения UX. Мне кажется, что я использовал этот плагин в прошлом, и он работал очень хорошо, поэтому я чувствую, что я что-то здесь испортил.
Подводя итог: если значение заполняется $ 100,00 при загрузке страницы, когда поле получает фокус, я хочу, чтобы значение оставалось $ 100,00, а не изменялось на $ 100,0.
Вот как я убираю десятичную из значений. Я также использую это для значений, выходящих из БД, поэтому я также убираю $
и ,
.
function strip(value) {
if(value.indexOf('.') > -1) {
return parseInt(value.replace('$','').replace(',','').replace('.','')) || 0;
} else {
return parseInt(value.replace('$','').replace(',','')) * 100 || 0;
}
}